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循環

  • 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-5
        for(int i=1; i<=5; i++) {
			System.out.println(i);
		}
		System.out.println("--------");
		//需求:輸出數據5-1
		for(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) {
		//求和的最終結果必須保存起來,需要定義一個變量,用於保存求和的結果,初始值為0
		int 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) {
		//求和的最終結果必須保存起來,需要定義一個變量,用於保存求和的結果,初始值為0
		int 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
  • 思路:
    1. 獲取所有的三位數,准備進行篩選,最小的三位數為100,最大的三位數為999,使用for循環獲取
    2. 獲取每一個三位數的個位,十位,百位,做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,用於保存“打印過”的數量,初始值為0
			2. 在判定和打印水仙花數的過程中,拼接空格, 但不換行,並在打印后讓count變量+1,記錄打印過的數量
			3. 在每一次count變量+1后,判斷是否到達了2的倍數,是的話,換行。

	*/
	public static void main(String[] args){
		// 1. 定義變量count,用於保存“打印過”的數量,初始值為0
		int 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循環(不知道循環次數時用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) {
		//定義一個計數器,初始值為0
		int 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循環結束后,該變量還可以繼續使用
  • 死循環(無限循環)的三種格式
    1. for(;😉{}
    2. while(true){}
    3. 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已經寫好的代碼
  • 使用步驟:

    1. 導入包

      import java.util.Random;

    2. 創建對象

      Random r = new Random();

    3. 產生隨機數

      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-10
			System.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("感謝您的使用");
		
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM