Java基础Switch和循环控制
1. switch語句
1.1 分支語句switch語句
-
格式
switch (表達式) {case 1:語句體1;break;case 2:語句體2;break;...default:語句體n+1;break; } -
執行流程:
- 首先計算出表達式的值
- 其次,和case依次比較,一旦有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結 束。
- 最后,如果所有的case都和表達式的值不匹配,就會執行default語句體部分,然后程序結束掉。
1.2 switch案例-減肥計劃
- 需求:鍵盤錄入星期數,顯示今天的減肥活動
周一:跑步
周二:游泳
周三:慢走
周四:動感單車
周五:拳擊
周六:爬山
周日:好好吃一頓
- 示例代碼:
public static void main(String[] args){// 1. 鍵盤錄入星期數據,使用變量接收Scanner sc = new Scanner(System.in);System.out.println("請輸入");int week = sc.nextInt();// 2. 多情況判斷,采用switch語句實現switch(week){// 3. 在不同的case中,輸出對應的減肥計劃case 1:System.out.println("跑步");break;case 2:System.out.println("游泳");break;case 3:System.out.println("慢走");break;case 4:System.out.println("動感單車");break;case 5:System.out.println("拳擊");break;case 6:System.out.println("爬山");break;case 7:System.out.println("好好吃一頓");break;default:System.out.println("您的輸入有誤");break;}}
}
1.3 switch語句case穿透
- 概述 : 如果switch語句中,case省略了break語句, 就會開始case穿透
- 需求 : 鍵盤錄入星期數,輸出工作日、休息日 (1-5)工作日,(6-7)休息日
- 示例代碼:
/*
case穿透是如何產生的?如果switch語句中,case省略了break語句, 就會開始case穿透.現象:當開始case穿透,后續的case就不會具有匹配效果,內部的語句都會執行直到看見break,或者將整體switch語句執行完畢,才會結束。
*/
public static void main(String[] args){Scanner sc = new Scanner(System.in);System.out.println("請輸入星期數:");int week = sc.nextInt();switch(week){case 1:case 2:case 3:case 4:case 5:System.out.println("工作日");break;case 6:case 7:System.out.println("休息日");break;default:System.out.println("您的輸入有誤");break;}}
}
2. for循環
2.1 循環語句-for循環
-
循環:
循環語句可以在滿足循環條件的情況下,反復執行某一段代碼,這段被重復執行的代碼被稱為循環體語句,當反復 執行這個循環體時,需要在合適的時候把循環判斷條件修改為false,從而結束循環,否則循環將一直執行下去,形 成死循環。
-
for循環格式:
for (初始化語句;條件判斷語句;條件控制語句) {循環體語句;
}
-
格式解釋:
- 初始化語句: 用于表示循環開啟時的起始狀態,簡單說就是循環開始的時候什么樣
- 條件判斷語句:用于表示循環反復執行的條件,簡單說就是判斷循環是否能一直執行下去
- 循環體語句: 用于表示循環反復執行的內容,簡單說就是循環反復執行的事情
- 條件控制語句:用于表示循環執行中每次變化的內容,簡單說就是控制循環是否能執行下去
-
執行流程:
①執行初始化語句
②執行條件判斷語句,看其結果是true還是false
? 如果是false,循環結束
? 如果是true,繼續執行
③執行循環體語句
④執行條件控制語句
⑤回到②繼續
2.2 for循環案例-輸出數據1-5和5-1
- 需求:在控制臺輸出1-5和5-1的數據
- 示例代碼:
public class ForTest01 {public static void main(String[] args) {//需求:輸出數據1-5for(int i=1; i<=5; i++) {System.out.println(i);}System.out.println("--------");//需求:輸出數據5-1for(int i=5; i>=1; i--) {System.out.println(i);}}
}
2.3 for循環案例-求1-5數據和
- 需求:求1-5之間的數據和,并把求和結果在控制臺輸出
- 示例代碼:
public class ForTest02 {public static void main(String[] args) {//求和的最終結果必須保存起來,需要定義一個變量,用于保存求和的結果,初始值為0int sum = 0;//從1開始到5結束的數據,使用循環結構完成for(int i=1; i<=5; i++) {//將反復進行的事情寫入循環結構內部// 此處反復進行的事情是將數據 i 加到用于保存最終求和的變量 sum 中sum += i;/*sum += i; sum = sum + i;第一次:sum = sum + i = 0 + 1 = 1;第二次:sum = sum + i = 1 + 2 = 3;第三次:sum = sum + i = 3 + 3 = 6;第四次:sum = sum + i = 6 + 4 = 10;第五次:sum = sum + i = 10 + 5 = 15;*/}//當循環執行完畢時,將最終數據打印出來System.out.println("1-5之間的數據和是:" + sum);}
}
- 本題要點:
- 今后遇到的需求中,如果帶有求和二字,請立即聯想到求和變量
- 求和變量的定義位置,必須在循環外部,如果在循環內部則計算出的數據將是錯誤的
2.4 for循環案例-求1-100偶數和
- 需求:求1-100之間的偶數和,并把求和結果在控制臺輸出 }
- 示例代碼:
public class ForTest03 {public static void main(String[] args) {//求和的最終結果必須保存起來,需要定義一個變量,用于保存求和的結果,初始值為0int sum = 0;//對1-100的數據求和與1-5的數據求和幾乎完全一樣,僅僅是結束條件不同for(int i=1; i<=100; i++) {//對1-100的偶數求和,需要對求和操作添加限制條件,判斷是否是偶數if(i%2 == 0) {sum += i;}}//當循環執行完畢時,將最終數據打印出來System.out.println("1-100之間的偶數和是:" + sum);}
}
2.5 for循環案例-水仙花數
- 需求:在控制臺輸出所有的“水仙花數”
- 解釋:什么是水仙花數?
- 水仙花數,指的是一個三位數,個位、十位、百位的數字立方和等于原數
- 例如
153 3*3*3 + 5*5*5 + 1*1*1 = 153
- 例如
- 水仙花數,指的是一個三位數,個位、十位、百位的數字立方和等于原數
- 思路:
- 獲取所有的三位數,準備進行篩選,最小的三位數為100,最大的三位數為999,使用for循環獲取
- 獲取每一個三位數的個位,十位,百位,做if語句判斷是否是水仙花數
- 示例代碼
public class ForTest04 {public static void main(String[] args) {//輸出所有的水仙花數必然要使用到循環,遍歷所有的三位數,三位數從100開始,到999結束for(int i=100; i<1000; i++) {//在計算之前獲取三位數中每個位上的值int ge = i%10;int shi = i/10%10;int bai = i/10/10%10;//判定條件是將三位數中的每個數值取出來,計算立方和后與原始數字比較是否相等if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {//輸出滿足條件的數字就是水仙花數System.out.println(i);}}}
}
2.6 for循環案例-每行打印2個水仙花數(統計)
- 需求:在控制臺輸出所有的“水仙花數”,要求每行打印2個
- 示例代碼:
public class Demo6For {/*需求:在控制臺輸出所有的“水仙花數”,要求每行打印2個System.out.print (打印內容); 打印后不換行System.out.println(打印內容); 打印后換行分析:1. 定義變量count,用于保存“打印過”的數量,初始值為02. 在判定和打印水仙花數的過程中,拼接空格, 但不換行,并在打印后讓count變量+1,記錄打印過的數量3. 在每一次count變量+1后,判斷是否到達了2的倍數,是的話,換行。*/public static void main(String[] args){// 1. 定義變量count,用于保存“打印過”的數量,初始值為0int count = 0;for(int i = 100; i <= 999; i++){int ge = i % 10;int shi = i / 10 % 10;int bai = i / 10 / 10 % 10;if( (ge*ge*ge + shi*shi*shi + bai*bai*bai) == i){// 2. 在判定和打印水仙花數的過程中,拼接空格, 但不換行,并在打印后讓count變量+1,記錄打印過的數量System.out.print(i + " ");count++;// 3. 在每一次count變量+1后,判斷是否到達了2的倍數,是的話,換行if(count % 2 == 0){System.out.println();}}}}
}
- 本題要點:
- 今后如果需求帶有統計xxx,請先想到計數器變量
- 計數器變量定義的位置,必須在循環外部
3. while循環
3.1 循環語句-while循環
-
while循環完整格式:
初始化語句; while (條件判斷語句) {循環體語句;條件控制語句; } -
while循環執行流程:
①執行初始化語句
②執行條件判斷語句,看其結果是true還是false
? 如果是false,循環結束
? 如果是true,繼續執行
③執行循環體語句
④執行條件控制語句
⑤回到②繼續
-
示例代碼:
public class WhileDemo {public static void main(String[] args) {//需求:在控制臺輸出5次"HelloWorld"//for循環實現for(int i=1; i<=5; i++) {System.out.println("HelloWorld");}System.out.println("--------");//while循環實現int j = 1;while(j<=5) {System.out.println("HelloWorld");j++;}}
}
3.2 while循環案例-珠穆朗瑪峰
- 需求:世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米),假如我有一張足夠大的紙,它的厚度是0.1毫米。請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?
- 示例代碼:
public class WhileTest {public static void main(String[] args) {//定義一個計數器,初始值為0int count = 0;//定義紙張厚度double paper = 0.1;//定義珠穆朗瑪峰的高度int zf = 8844430;//因為要反復折疊,所以要使用循環,但是不知道折疊多少次,這種情況下更適合使用while循環//折疊的過程中當紙張厚度大于珠峰就停止了,因此繼續執行的要求是紙張厚度小于珠峰高度while(paper <= zf) {//循環的執行過程中每次紙張折疊,紙張的厚度要加倍paper *= 2;//在循環中執行累加,對應折疊了多少次count++;}//打印計數器的值System.out.println("需要折疊:" + count + "次");}
}
4. 循環細節
4.1 循環語句-dowhile循環
-
完整格式:
初始化語句; do {循環體語句;條件控制語句; }while(條件判斷語句); -
執行流程:
① 執行初始化語句
② 執行循環體語句
③ 執行條件控制語句
④ 執行條件判斷語句,看其結果是true還是false
如果是false,循環結束
如果是true,繼續執行
⑤ 回到②繼續
-
示例代碼:
public class DoWhileDemo {public static void main(String[] args) {//需求:在控制臺輸出5次"HelloWorld"//for循環實現for(int i=1; i<=5; i++) {System.out.println("HelloWorld");}System.out.println("--------");//do...while循環實現int j = 1;do {System.out.println("HelloWorld");j++;}while(j<=5);}
}
4.2 三種循環的區別
- 三種循環的區別
- for循環和while循環先判斷條件是否成立,然后決定是否執行循環體(先判斷后執行)
- do…while循環先執行一次循環體,然后判斷條件是否成立,是否繼續執行循環體(先執行后判斷)
- for循環和while的區別
- 條件控制語句所控制的自增變量,因為歸屬for循環的語法結構中,在for循環結束后,就不能再次被訪問到了
- 條件控制語句所控制的自增變量,對于while循環來說不歸屬其語法結構中,在while循環結束后,該變量還可以繼續使用
- 死循環(無限循環)的三種格式
- for(;;){}
- while(true){}
- do {} while(true);
4.3 死循環
-
死循環格式
for死循環格式 : for(;;){}while死循環格式 :while(true){}do..while死循環格式 :do{}while(true); -
死循環案例
/*問題: 死循環有應用場景嗎?例如: 鍵盤錄入一個1-100之間的整數顧慮: 鍵盤錄入是用戶操作的, 用戶就可能會出現一些誤操作的現象*/
public static void main(String[] args) {/*for(;;){System.out.println("我停不下來了~");}*//*while(true){System.out.println("我停不下來了~");}*/do{System.out.println("我停不下來了~"); }while(true);System.out.println("看看我能被執行嗎?~"); // 無法訪問的語句
}
}
4.4 跳轉控制語句
- 跳轉控制語句(break)
- 跳出循環,結束循環
- 跳轉控制語句(continue)
- 跳過本次循環,繼續下次循環
- 注意: continue只能在循環中進行使用!
public class Demo1Continue {/*continue : 跳過某次循環體內容的執行注意:使用是基于條件控制, 在循環內部使用.需求: 模擬電梯上行的過程 1-24層, 4層不停.*/public static void main(String[] args){for(int i = 1; i <= 24; i++){if(i == 4){continue;}System.out.println(i + "層到了~");}}}
public class Demo2Break {/*break : 終止循環體內容的執行注意:使用是基于條件控制的break語句只能在循環和switch中進行使用.需求: 模擬20歲工作到80歲, 60歲退休.*/public static void main(String[] args){for(int i = 20; i <= 80; i++){if(i == 60){break; // 結束整個循環}System.out.println(i + "歲正在上班");}}}
import java.util.Scanner;public class Test {/*需求:程序運行后,用戶可多次查詢星期對應的減肥計劃,直到輸入0,程序結束步驟:1. 不明確用戶操作幾次, 使用死循環包裹業務邏輯2. 匹配到0的時候,使用break結束循環死循環*/public static void main (String[] args){lo:while(true){System.out.println("請輸入您要查看的星期數:");System.out.println("(如無需繼續查看,請輸入0退出程序)");// 1. 鍵盤錄入星期數據,使用變量接收Scanner sc = new Scanner(System.in);int week = sc.nextInt();// 2. 多情況判斷,采用switch語句實現switch(week){// 3. 在不同的case中,輸出對應的減肥計劃case 0:System.out.println("感謝您的使用");break lo;case 1:System.out.println("跑步");break;case 2:System.out.println("游泳");break;case 3:System.out.println("慢走");break;case 4:System.out.println("動感單車");break;case 5:System.out.println("拳擊");break;case 6:System.out.println("爬山");break;case 7:System.out.println("好好吃一頓");break;default:System.out.println("您的輸入有誤");break;}}}
}
5. Random
5.1 Random產生隨機數(掌握)
-
概述:
- Random類似Scanner,也是Java提供好的API,內部提供了產生隨機數的功能
- API后續課程詳細講解,現在可以簡單理解為Java已經寫好的代碼
- Random類似Scanner,也是Java提供好的API,內部提供了產生隨機數的功能
-
使用步驟:
-
導入包
import java.util.Random;
-
創建對象
Random r = new Random();
-
產生隨機數
int num = r.nextInt(10);
解釋: 10代表的是一個范圍,如果括號寫10,產生的隨機數就是0-9,括號寫20,參數的隨機數則是0-19
-
-
示例代碼:
import java.util.Random;public class Demo1Random {/*Random : 產生隨機數1. 導包 : import java.util.Random;導包的動作必須出現在類定義的上面2. 創建對象 : Random r = new Random();上面這個格式里面,r 是變量名,可以變,其他的都不允許變3. 獲取隨機數 : int number = r.nextInt(10); //獲取數據的范圍:[0,10) 包括0,不包括10上面這個格式里面,number是變量名,可以變,數字10可以變。其他的都不允許變需求: 產生隨機數1-10之間的*/public static void main(String[] args){// 2. 創建對象Random r = new Random();for(int i = 1; i <= 10; i++){// 3. 獲取隨機數int num = r.nextInt(10) + 1; // 1-10System.out.println(num);}}
}
5.3 Random練習-猜數字(應用)
-
需求:
程序自動生成一個1-100之間的數字,使用程序實現猜出這個數字是多少?
當猜錯的時候根據不同情況給出相應的提示
A. 如果猜的數字比真實數字大,提示你猜的數據大了
B. 如果猜的數字比真實數字小,提示你猜的數據小了
C. 如果猜的數字與真實數字相等,提示恭喜你猜中了
-
示例代碼:
import java.util.Scanner;
import java.util.Random;public class Test {/*需求:程序自動生成一個1-100之間的數字,使用程序實現猜出這個數字是多少?當猜錯的時候根據不同情況給出相應的提示如果猜的數字比真實數字大,提示你猜的數據大了如果猜的數字比真實數字小,提示你猜的數據小了如果猜的數字與真實數字相等,提示恭喜你猜中了1. 準備Random和Scanner對象, 分別用于產生隨機數和鍵盤錄入2. 使用Random產生一個1-100之間的數, 作為要猜的數3. 鍵盤錄入用戶猜的的數據4. 使用錄入的數據(用戶猜的數據)和隨機數(要猜的數據)進行比較, 并給出提示5. 以上內容需要多次進行, 但無法預估用戶輸入幾次可以猜測正確, 使用while(true)死循環包裹6. 猜對之后, break結束.*/public static void main(String[] args){// 1. 準備Random和Scanner對象, 分別用于產生隨機數和鍵盤錄入Random r = new Random();Scanner sc = new Scanner(System.in);// 2. 使用Random產生一個1-100之間的數, 作為要猜的數int randomNum = r.nextInt(100) + 1;// 5. 以上內容需要多次進行, 但無法預估用戶輸入幾次可以猜測正確, 使用while(true)死循環包裹while(true){// 3. 鍵盤錄入用戶猜的的數據System.out.println("請輸入您猜的數據:");int num = sc.nextInt();// 4. 使用錄入的數據(用戶猜的數據)和隨機數(要猜的數據)進行比較, 并給出提示if(num > randomNum){System.out.println("猜大了");}else if(num < randomNum){System.out.println("猜小了");}else{// 6. 猜對之后, break結束.System.out.println("恭喜,猜中了");break;}}System.out.println("感謝您的使用");}
}
總結
以上是生活随笔為你收集整理的Java基础Switch和循环控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础语法运算和控制符
- 下一篇: Java的IDEA最常用快捷键汇总+快速