[Java教程]8.运算符(上节游戏完成)

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

 以及还有一些位运算符,涉及到原码反码补码,后面讲解.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章