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
以及還有一些位運算符,涉及到原碼反碼補碼,後面講解.