Java教程专栏:https://blog.csdn.net/qq_41806966/category_9929686.html
本节完成上节留下的练习 和 学习 Java 里的运算符
完成上节留下的练习
上一节博客(题目文本内容从此获取): https://blog.csdn.net/qq_41806966/article/details/105915782
开始制作
在之前的目录新建一个文件夹,并新建一个Java文件(名称随意)
打开,先将 main 写好
创建玩家有的属性(健康值 和 金币)
通过观察题意可得 玩家拥有健康值 和 金币
通过上面这句可得出,有一个变量(健康值),默认为100 所以我们定义一个变量 health(因为是数字 所以类型为整形 这里使用int)20
健康值为0 游戏结束,所以我们需要添加一个判断,在执行完操作后(循环的最后)判断健康值是否小于0(< 小于号),为0我们跳出循环并提示失败.
执行每一个操作健康值减10,判断结果
第二句规则是
通过此句,得出,我们不止一次操作(使用循环),并且每次操作都会消耗10健康值(循环里执行 health-10 操作)
这里就使用 while 死循环(因为 实际上此游戏可以一直运行)
在执行操作之前,我们需要获取到用户的操作,所以需要使用 Scanner,在顶部导入Scanner,并创建Scanner
此条操作应放在循环的最底部 在判断是否结束的上方.
完成家的部分
现在我们已经做完了 判断游戏结果和每次操作-10健康值,接下来就是开始做游戏功能部分
在家里有两个选项,出门 和 去往大街.我们需要从键盘接收到做什么操作,并且定义两个不同的地点的结果
去往大街则又有不同的选项,睡觉则恢复健康值(不能超过最大健康值 100),所以代码如下
import java.util.Scanner; public class ShopGame { public static void main(String[] args) { //健康值 默认100 满值 int health = 100; //金币 默认为 0 int money = 0; //创建Scanner Scanner input = new Scanner(System.in); //输出提醒一下,人性化一点 System.out.println("开始游戏"); while (true) { //当前的场景 家 //提醒用户当前场景以及操作的内容 //0 为睡觉,1 为去大街 System.out.println("**********************"); System.out.println("当前的场景: 家"); //玩家有两个属性 我们每执行一次操作就给输出方便见到结果 System.out.println("你当前的健康值:" + health); System.out.println("你当前的:" + money); System.out.println("请输入编号,你可以选择:"); System.out.println("0.睡觉"); System.out.println("1.去往大街"); System.out.println("**********************"); //接收用户的目的 int home = input.nextInt(); //执行目的 if (home == 0) { //睡觉 加20点健康值 health = health + 20; //健康值不能超过100 //大于号在键盘的 M 的右边的右边也就是点. 要同时按下shift键 if (health > 100) { health = 100; } System.out.println("Zzzzz..."); } else if (home == 1) { //去往大街 } else { System.out.println("没有此操作,请重新输入!"); //因为是输入错误(并没有执行操作) 所以不需要减健康值 //使用continue(继续) 就直接从头开始执行了 continue; } //执行一次操作,健康值减去10(放在代码的最下面,在判断结果的上面) //减号 - 在键盘上面一排小数字0的右边 health = health - 10; //判断结果 健康值小于0则失败了 在循环的最下方 //小于号 < 在键盘M的右边 也就是逗号,要同时按下Shift键 if (health < 0) { //提示游戏失败 System.out.println("很遗憾,你的挑战失败!"); //跳出循环 不跳出则又会继续执行循环里的代码 break; } } //跳出循环后就会执行到这里来了 这里没有语句 所以程序直接结束 } }
现在,我们的程序已经可以执行睡觉了,并且你可以看到健康值的改变.每当看到自己操作数据的改变会是那么的愉快.
完成大街场景
大街上有三个选项,商店,打工,吃饭
商店又是一个场景,所以大街中,实际要实现的只有 打工,和吃饭功能
代码如下(if中的大街部分的代码(代码太多 贴出来影响观看))
} else if (home == 1) { //去往大街 将最后的代码复制上来 //因为去往大街 和 在大街是两次操作 health = health - 10; if (health < 0) { System.out.println("很遗憾,你的挑战失败!"); break; } //提醒用户当前的场景操作 //0商店 1打工 2吃饭 System.out.println("**********************"); System.out.println("当前的场景: 大街"); System.out.println("你当前的健康值:" + health); System.out.println("你当前的:" + money); System.out.println("请输入编号,你可以选择:"); System.out.println("0.去往商店"); System.out.println("1.打工"); System.out.println("2.吃饭"); System.out.println("**********************"); //接收用户的目的 这里变量名为street 中文意思为街道 int street = input.nextInt(); //这里使用 switch,熟悉一下 switch (street) { case 0: //去往商店 break; case 1: //打工 消耗20健康值换取100金币 //健康值不够肿么办? 当然是把你赶走(你只能回家) if (health > 20) { //打工 消耗健康值换取金币 health = health - 20; money = money + 100; } else { //健康值不够 把你赶走 使用continue 直接从头开始(家里) System.out.println("就你这体能还想打工?回家洗洗睡吧!"); continue; } break; case 2: //吃饭 消耗50金币 恢复30健康值 //金币不够怎么办? 你去吃自助餐没带够钱,当然是把你赶走. if (money > 50) { money = money - 50; health = health + 30; } else { //金币不够 把你赶走 使用continue 直接从头开始(家里) System.out.println("想吃霸王餐?回家洗洗睡吧!"); continue; } break; //default 类似于if的 else,也就是上面所有条件不成立执行此 default: System.out.println("你来到了大街,但是没有你要的东西,你回家了."); break; } }
目前的程度已经可以玩一玩了,但是没有通关.
完成商店场景
这是最后一个场景,也是最后一步了
与写大街的场景类似
结果演示
通关输入顺序: 4个1 6个0 4个1 8个0 4个1...
所有的代码如下
import java.util.Scanner;
public class ShopGame {
public static void main(String[] args) {
//健康值 默认100 满值
int health = 100;
//金币 默认为 0
int money = 0;
//创建Scanner
Scanner input = new Scanner(System.in);
//输出提醒一下,人性化一点
System.out.println("开始游戏");
//这里的 W: 是给循环命名 因为商店购买了通关药水跳出的是switch
//所以需要使用名称来指定跳出哪个
W:while (true) {
//当前的场景 家
//提醒用户当前场景以及操作的内容
//0 为睡觉,1 为去大街
System.out.println("**********************");
System.out.println("当前的场景: 家");
//玩家有两个属性 我们每执行一次操作就给输出方便见到结果
System.out.println("你当前的健康值:" + health);
System.out.println("你当前的金币:" + money);
System.out.println("请输入编号,你可以选择:");
System.out.println("0.睡觉");
System.out.println("1.去往大街");
System.out.println("**********************");
//接收用户的目的
int home = input.nextInt();
//执行目的
if (home == 0) {
//睡觉 加20点健康值
health = health + 20;
//健康值不能超过100
//大于号在键盘的 M 的右边的右边也就是点. 要同时按下shift键
if (health > 100) {
health = 100;
}
System.out.println("Zzzzz...");
} else if (home == 1) {
//去往大街 将最后的代码复制上来
//因为去往大街 和 在大街是两次操作
health = health - 10;
if (health < 0) {
System.out.println("很遗憾,你的挑战失败!");
break;
}
//提醒用户当前的场景操作
//0商店 1打工 2吃饭
System.out.println("**********************");
System.out.println("当前的场景: 大街");
System.out.println("你当前的健康值:" + health);
System.out.println("你当前的金币:" + money);
System.out.println("请输入编号,你可以选择:");
System.out.println("0.去往商店");
System.out.println("1.打工");
System.out.println("2.吃饭");
System.out.println("**********************");
//接收用户的目的 这里变量名为street 中文意思为街道
int street = input.nextInt();
//这里使用 switch,熟悉一下
switch (street) {
case 0:
//去往商店 和 在商店是两个操作
health = health - 10;
if (health < 0) {
System.out.println("很遗憾,你的挑战失败!");
break;
}
//提醒用户当前的场景操作
//0健康药水 1通关药水 其余都为回家
System.out.println("**********************");
System.out.println("当前的场景: 商店");
System.out.println("你当前的健康值:" + health);
System.out.println("你当前的金币:" + money);
System.out.println("请输入编号,你可以选择:");
System.out.println("0.健康药水 200金币");
System.out.println("1.通关药水 1000金币");
System.out.println("其余编号都为回家");
System.out.println("**********************");
//接收用户的目的 这里变量名为shop 中文意思为商店
int shop = input.nextInt();
if (shop == 0) {
//健康药水 金币不够直接赶回家
if (money < 200) {
System.out.println("这位客官,出口这边请.");
} else {
health = 100;
money = money - 200;
System.out.println("健康值加满了");
}
} else if (shop == 1) {
//通关药水,金币不够直接回家
if (money < 1000) {
System.out.println("这位客官,出口这边请.");
} else {
money = money - 1000;
System.out.println("恭喜你取得了最终的胜利!");
//跳出最外层循环 而不是switch,W是命名的
break W;
}
}
break;
case 1:
//打工 消耗20健康值换取100金币
//健康值不够肿么办? 当然是把你赶走(你只能回家)
if (health > 20) {
//打工 消耗健康值换取金币
health = health - 20;
money = money + 100;
} else {
//健康值不够 把你赶走 使用continue 直接从头开始(家里)
System.out.println("就你这体能还想打工?回家洗洗睡吧!");
continue;
}
break;
case 2:
//吃饭 消耗50金币 恢复30健康值
//金币不够怎么办? 你去吃自助餐没带够钱,当然是把你赶走.
if (money > 50) {
money = money - 50;
health = health + 30;
} else {
//金币不够 把你赶走 使用continue 直接从头开始(家里)
System.out.println("想吃霸王餐?回家洗洗睡吧!");
continue;
}
break;
//default 类似于if的 else,也就是上面所有条件不成立执行此
default:
System.out.println("你来到了大街,但是没有你要的东西,你回家了.");
break;
}
} else {
System.out.println("没有此操作,请重新输入!");
//因为是输入错误(并没有执行操作) 所以不需要减健康值
//使用continue(继续) 就直接从头开始执行了
continue;
}
//执行一次操作,健康值减去10(放在代码的最下面,在判断结果的上面)
//减号 - 在键盘上面一排小数字0的右边
health = health - 10;
//判断结果 健康值小于0则失败了 在循环的最下方
//小于号 < 在键盘M的右边 也就是逗号,要同时按下Shift键
if (health < 0) {
//提示游戏失败
System.out.println("很遗憾,你的挑战失败!");
//跳出循环 不跳出则又会继续执行循环里的代码
break;
}
}
//跳出循环后就会执行到这里来了 这里没有语句 所以程序直接结束
}
}
进入今日正题,运算符
运算符
什么是运算符? 可以这么理解,运算符就是用于运算的符号
运算符又分为 一元运算符,二元运算符,三元运算符
一元运算符就是只有一个操作数. 例如 i++这种
二元运算符是有两个操作数 比如 1 + 1
三元运算符有三个操作数,例如 1+1==2 ? 1 : 2;这种
一元运算符
++,--
++就是让变量+1,--就是让变量-1
有两种写法,一种是运算符在前,一种是在后,当然也有区别,一个是先执行,后加减,另一个就是先加减,后执行
int i = 0; System.out.println(i++); i=0; System.out.println(++i);
最后的结果为 0,1,因为 ++i 是先执行+1在进行操作,i++是先进行操作后执行加减,所以第一个为0,第二个为1
二元运算符
+,-,*,/,% 以及扩展的 +=.-=,*=,/=
+,-,*,/就是我们认为的加减乘除; %(百分号 键盘上方数字5那) 取余操作,(就是小学学的 除以一个东西的余数)
int i = 1 + 1;//i = 2
需要注意的是,整形进行除法最终结果也是整形而不是小数
+=,-=...是简写操作
例如
int i = 0; i += 1;//这里等价于 i = i + 1;
对于取余来说,可以简单理解,比如 i % 10,这个式字的结果不会大于10,因为任何数除以 x 的余数都不会大于x
三元运算符
语法 条件 ? true 返回的结果 : false返回的结果;
例如 int i = 1+1==1 ? 111 : 222;//最终 i = 222. 因为 1+1==1 是false,一加一不等于1
逻辑运算符
&&,||,!
逻辑运算符经常用到.
&&是 并且的意思
只有当 && 前后两个式子都为 true 的时候,表达式才会为 true
例如 1==1 && 2==2 这条语句为true 像 1==1 && 1==2 的结果为false
||是 或者的意思
||前后两个式字有一个为 true 整个表达式为true
例如 1==1 || 1==2 这条语句为true 因为1==1为true, 1==2 || 2==1 这条语句为false
!(感叹号)是取反的意思,用作boolean变量或者结果上
作用就是 将true变为false,false变为true
例如 !(1==1) 这个结果为false,1=1为true,取反后就为false
还有我们之前经常用到的 赋值运算符 =
=是赋值运算符,将右边的值赋给左边的变量
关系运算符
>,<,>=,<=,==,!=
> 大于号,<小于号,之前已经用过了 1 > 2返回true 1是大于2的,1 > 1则为false,1不大于1
>= 大于等于,<=小于等于,1 >= 1返回true,1大于等于1是正确的
==等于
!=不等于,1!=2 返回true,1的确不等于2
以及还有一些位运算符,涉及到原码反码补码,后面讲解.