003-Java程式流程式控制制

来源:https://www.cnblogs.com/LXHYouth/p/18052782
-Advertisement-
Play Games

3. Java程式流程式控制制(重點) 程式的三種控制結構 3.1 分支結構 if, switch 3.1.1 if if 分支 根據條件(真或假)來決定執行某段代碼。 if分支應用場景 if 第一種形式 執行流程: 首先判斷條件表達式的結果,如果為true執行語句體,為false就不執行語句體。 if ...


3. Java程式流程式控制制(重點)

  • 程式的三種控制結構

3.1 分支結構 if, switch

3.1.1 if

  1. if 分支

    • 根據條件(真或假)來決定執行某段代碼。
  2. if分支應用場景

  3. if 第一種形式

    • 執行流程:
    • 首先判斷條件表達式的結果,如果為true執行語句體,為false就不執行語句體。
  4. if 第二種形式

    • 執行流程:
    • 首先判斷條件表達式的結果,如果為true執行語句體1,為 false 就執行語句體2。
  5. if 第三種形式

    • 執行流程:
    • 先判斷條件1的值,如果為true則執行語句體1,分支結束;如果為false則判斷條件2的值
    • 如果值為true就執行語句體2,分支結束;如果為false則判斷條件3的值
    • ...
    • 如果沒有任何條件為true,就執行else分支的語句體n+1。
  6. 總結

    1. if分支的作用是什麼?
      可以根據條件,選擇執行某段程式
    2. if分支的寫法有幾種?
  7. 多學一招: if使用的幾個常見問題

    • 如果if語句的{}中只有一行代碼的情況,{}可以省略不寫(但是不推薦省略).
    • if(條件){},()後不能跟“;”否則{}中的代碼將不受if的控制了.
  8. 練習: 用戶登錄

package com.itheima.a_if;
import java.util.Scanner;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */

/*
if 案例: 用戶登錄
    需求: 鍵盤錄入用戶名和密碼
        如果用戶名不是1, 程式輸出:用戶名錯誤
        如果密碼不是2, 程式輸出:密碼錯誤
        如果用戶名和密碼沒問題, 程式輸出:登錄成功
    提示:
        使用Scanner接收用戶輸入的信息,並使用變數接收
        使用if...else if...else 組織程式邏輯
*/
public class Demo03 {
    public static void main(String[] args) {
//        1. 創建一個自己的掃描器
        Scanner sc= new Scanner(System.in);
//        2.提示用戶輸入用戶名
        System.out.print("請輸入用戶名: ");
        int name = sc.nextInt();
//        提示用戶輸入密碼
        System.out.print("請輸入密碼: ");
        int passWord= sc.nextInt();
        if(name!=1){
            System.out.println("用戶名錯誤!!!");
        }else if(passWord!=2){
            System.out.println("密碼錯誤!!!");
        }else{
            System.out.println("登錄成功!!!");
        }

    }
}

3.1.2 switch

  1. switch分支
    • 是通過比較值來決定執行哪條分支。
  2. switch分支的執行流程
    • 先執行表達式的值,再拿著這個值去與case後的值進行匹配。
    • 與哪個case後的值匹配為true就執行哪個case塊的代碼,遇到break就跳出switch分支。
    • 如果全部case後的值與之匹配都是false,則執行default塊的代碼。
  3. if跟switch的比較
    • if適合做區間匹配,功能更加強大.
    • switch適合做值匹配,性能更好.
  4. 總結:
    • switch分支的格式、執行流程是怎麼樣的?
    • if、switch的區別有哪些?
      • if適合做區間匹配,功能更加強大.
      • switch適合做值匹配,性能更好.

3.1.3 switch使用時註意事項

  1. 使用switch分支的幾點註意事項
    • 表達式類型只能是byte、short、int、char,JDK5開始支持枚舉,JDK7開始支持String,不支持double、float、long。
    • case給出的值不允許重覆,且只能是字面量,不能是變數。
    • 正常使用switch的時候,不要忘記寫break,否則會出現穿透現象。
    • 當case中沒有寫break時,就會開啟穿透,後續的case不再匹配,直接執行, 直到遇到下一個break或者整個switch執行完畢後才結束, 穿透現象是可以加以利用, 優化代碼的.

3.1.4 總結

  1. 使用switch時有哪些註意事項?
  • 表達式類型可以是byte、short、int、char、枚舉、String,不能是double、float、long
  • case給出的值不允許重覆,且只能是字面量,不能是變數.
  • 正常使用switch的時候,不要忘記寫break,否則會出現穿透現象。
  1. switch穿透性能解決什麼問題?
  • 存在多個case分支的代碼是一樣時,可以把代碼寫到一個case塊,其他case塊通過穿透性能,穿透到該case塊即可,這樣可以簡化代碼。
  1. 案例:
package com.itheima.b_switch;

import java.util.Scanner;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */


/*
分支結構 switch
  1. 使用待匹配的值去匹配對應的case值, 執行對應的語句體, 遇到break就結束switch語句
  2. 所有的case都匹配不到,則執行default中的語句體

  switch(待匹配的值){
    case 值1:
        語句體1;
        break;
    case 值2:
        語句體2;
        break;
        ....
    case 值n:
        語句體n;
        break;
    default:
        語句體;
        break;
  }
*/

/*
switch註意事項:
    1. 表達式類型只能是byte、short、int、char,JDK5開始支持枚舉,JDK7開始支持String、不支持double、float、long。
    2. case給出的值不允許重覆,且只能是字面量,不能是變數。
    3. 正常使用switch的時候,不要忘記寫break,否則會出現穿透現象。

switch的case穿透
    當case中沒有寫break時,就會開啟穿透,後續的case不再匹配,直接執行,直到遇到下一個break或者整個switch執行完畢後才結束
    穿透現象是可以加以利用, 優化代碼的
 */


public class Demo01 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        //需求: 根據今天星期幾, 判斷是工作還是休息
        System.out.print("請輸入今天星期幾: ");
        int weekDay= sc.nextInt();
        switch(weekDay){
            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("輸入錯誤!!!");
        }

        //需求: 根據定義的月份month,輸出對應的季節
        // 3、4、5:春季
        //6、7、8:夏季
        //9、10、11:秋季
        //其它 : 輸入月份有誤
//        如果發現上下有多個case下的代碼完全能相同, 可以利用穿透現象進行簡寫,只寫最後一個case里的代碼

        System.out.print("請輸入月份: ");
        int month = sc.nextInt();
        switch(month){
            case 12:
            case 1:
            case 2:
                System.out.println("現在是冬季");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("現在是春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("現在是夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("現在是秋季");
                break;
            default:
                System.out.println("輸入月份有誤!!!");
        }


    }
}

3.2 迴圈結構 for, while, do-while

3.2.1 for迴圈

  1. for迴圈
  • 控制一段代碼反覆執行很多次。
  1. 應用場景
  • alt text
  1. for迴圈格式
for(初始化語句 ; 條件判斷語句;  條件變更語句 ) {
    	迴圈體語句 ; //要重覆執行的代碼
}

// 輸出3次hello world
for (
    int i = 1; 
    i <= 3; 
    i++
) {
    System.out.println(“hello world");
}

  1. for迴圈總結:

    • for迴圈格式和執行流程是什麼樣的?
     for(初始化語句 ; 條件判斷語句;  條件變更語句 ) {
         迴圈體語句 ; //要重覆執行的代碼
     }
     
    
    // 輸出3次hello world
    for (int i = 1; i <= 3; i++) {
     System.out.println(“hello world");
     }
     
    
    • for迴圈的作用是什麼?
      • 減少代碼的重覆編寫,靈活的控製程序的執行。

3.2.2 for迴圈案例

  1. 案例一: 求和
  • 需求:求1-10之間的奇數和,並把求和結果在控制台輸出。

  • 分析:

    • 使用for迴圈依次產生:1、2、3、4、5。
    for (int i = 1; i <= 5; i++) {
    
    }
    
    • 在迴圈外定義一個int類型的變數sum用於求和,迴圈每產生一個數,就加到sum中去
    int sum = 0;
    for (int i = 1; i <= 5; i++) {
        sum += i;
        }
    
    
    • 迴圈結束後,輸出求和變數即是結果。
package com.itheima.c_for;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */

/*
for案例:
    需求:求1-5之間的數據和,並把求和結果在控制台輸出。
 */
public class Demo02 {
    public static void main(String[] args) {
        //思路:   
        //1.首先使用for遍歷出1~5的數, 可以使用計數器i.
        //2. 然後在for迴圈中依次進行累加  如: sum +=i.
        int sum=0;
        for(int i=1;i<6;i++){
            sum +=i;
        }
        System.out.println("1~5之間的數據和為: "+ sum);
    }

}

  1. 案例二: 求奇數和
  • 需求:求1-10之間的奇數和,並把求和結果在控制台輸出。

  • 方式一:

    • 定義for迴圈,使其能夠依次產生:1、2、3、4、5… 10。
    • 在迴圈外定義一個int類型的變數sum用於求和
    • 迴圈每產生一個數據,都通過if判斷其是否是奇數,是奇數,則進到if中將其加到sum中去。
    for (int i = 1; i <= 10 ; i++) {
      if(i % 2 == 1){
          // i = 1 3 5 7 9    
          }
      }
    
    //或者這樣
    for (int i = 1; i < 11; i++) {
          if (i%2!=0) {
          }
    }  
    
  • 方法二:

    • 定義for迴圈,使其能夠依次產生:1、3、5 、7 、9
    for (int i = 1; i <= 10; i+=2) {
    
    }
    
    • 在迴圈外定義一個整數變數sum,迴圈每產生一個數據就加到sum中去。
    • 迴圈結束後,輸出sum變數即可。
  • 完整代碼

package com.itheima.c_for;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */

/*
    需求:求1-10之間的奇數和,並把求和結果在控制台輸出。
*/
public class Demo03 {
    public static void main(String[] args) {
        //思路:
        //1. 先用for迴圈遍歷出1~10所有數
        //2. 使用if語句判斷, 剔除所有偶數
        //3. 最後對遍歷出的所有奇數進行累加.
        int sum=0;
        for (int i = 1; i < 11; i++) {
            if (i%2!=0) {
//                System.out.println(i);    //查看一下是否全為奇數
                sum +=i;
            }
        }
        System.out.println("1~10中所有的奇數和為: "+  sum);
    }

}

  1. 案例三: 求水仙花數
  • 需求:在控制台輸出所有的“水仙花數”,水仙花數必須滿足如下2個要求:

    • 水仙花數是一個三位數
    • 水仙花數的個位、十位、百位的數字立方和等於原數
  • 分析:

    • 定義一個for迴圈從“100一直到999”。
    • 每次訪問到數據後,提取該數據的:個位、十位、百位數字。
    • 使用if判斷:個位、十位、百位的數字立方和是否等於原數,等於則輸出該數據。
    公式總結:
    個位 :數值 % 10
    十位 :數值 / 10 % 10
    百位 :數值 / 10 / 10 % 10
    千位 :數值 / 10 / 10 / 10 % 10;
    ...
    
    
    • 完整代碼:
  package com.itheima.c_for;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */


/*
for案例: 求水仙花數
    1. 水仙花數是一個三位數
    2. 水仙花數的個位、十位、百位的數字立方和等於原數

擴展: 如果還要知道水仙花數的個數怎麼辦?
*/
public class Demo04 {
    public static void main(String[] args) {
        //思路:
        //先定義三個變數來保存三位數的個位、十位、百位的數.
        //再定義一個temp來臨時保存個位、十位、百位的數字立方和.
        //判斷temp 是否與i相等, 如果相等就位水仙花數.
        //輸出每一個水仙花數.
        int a,b,c,temp;
        System.out.print("所有的水仙花數為:");
        for (int i = 100; i <1000; i++) {
            a=i%10;
            b=i/10%10;
            c=i/100%10;
            temp=a*a*a+b*b*b+c*c*c;
            if(i==temp){
                System.out.print(temp+", ");
            }
        }
    }
}

3.2.3 while迴圈

  1. while 迴圈
初始化語句;
while (條件判斷語句) {    
    迴圈體語句;//被重覆執行的代碼
    條件變更語句;
}

int i = 1;
while (i <= 3) {
    System.out.println("Hello World");
    i++;
}

  1. 執行流程:

    • 迴圈一開始,執行int i = 1 一次。
    • 此時  i=2 ,接著電腦執行迴圈條件語句:1 <= 3 返回true , 電腦就進到迴圈體中執行,輸出 :helloWorld ,然後執行迭代語句i++。
    • 此時  i=2 ,接著電腦執行迴圈條件語句:2 <= 3 返回true , 電腦就進到迴圈體中執行,輸出 :helloWorld ,然後執行迭代語句i++。
    • 此時  i=3 ,接著電腦執行迴圈條件語句:3 <= 3 返回true , 電腦就進到迴圈體中執行,輸出 :helloWorld ,然後執行迭代語句i++。
    • 此時 i=4 ,然後判斷迴圈條件:4 <= 3 返回false, 迴圈立即結束!!
  2. while總結

初始化語句;
while (條件判斷語句) {    
    迴圈體語句;//被重覆執行的代碼
    條件變更語句;
}

int i = 1;
while (i <= 3) {
    System.out.println("Hello World");
    i++;
}

  • 入門案例:
package com.itheima.d_while;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */

/*
迴圈結構: while
    格式:
        初始化語句;
        while (條件判斷語句) {
            迴圈體語句;//被重覆執行的代碼
            條件變更語句;
        }
    執行過程:
        1. 執行一次初始化語句
        2. 執行條件判斷語句
            如果不成立, 迴圈結束
            如果成立, 執行一次迴圈體
        3. 執行條件變更語句
        4. 重覆2、3步驟

*/
public class Demo01 {
    public static void main(String[] args) {
        //需求1: 使用while迴圈列印5次HelloWorld
        int i=0;
        while(i<5){
            System.out.println("HelloWorld");
            i++;
        }

        //需求2: 說出上面程式的執行順序
        //定義一個迴圈變數i=0.
        //進入判斷語句, 0<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
        //進入判斷語句, 1<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
        //進入判斷語句, 2<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
        //進入判斷語句, 3<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
        //進入判斷語句, 4<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
        //進入判斷語句, 5<5為false, 跳出for迴圈

    }
}


3.2.4 while迴圈案例

  • 案例: 紙張摺疊成珠穆朗瑪峰的高度
  • 需求:世界最高山峰珠穆朗瑪峰高度是:8848.86米=8848860毫米,假如我有一張足夠大的紙,它的厚度是0.1毫米。請問:該紙張摺疊多少次,可以折成珠穆朗瑪峰的高度?
  • 分析
    • 定義變數存儲珠穆朗瑪峰的高度、紙張的高度。
double peakHeight = 8848860;  // 山峰高度
double paperThickness = 0.1;  // 紙張厚度

  • 使用while迴圈來控製紙張摺疊,迴圈條件是(紙張厚度<山峰高度),迴圈每執行一次,就表示紙張摺疊一次,並把紙張厚度變為原來兩倍。

  • 迴圈外定義計數變數count,迴圈每摺疊一次紙張,讓count變數+1;

  • 完整代碼

package com.itheima.d_while;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */

/*
案例需求: 珠峰摺紙
    已知珠峰的高度是8848860毫米,紙張的厚度是0.1毫米
    問紙張對折幾次, 厚度能夠達到/超過珠峰高度
*/
public class Demo02 {
    public static void main(String[] args) {
        double peakHeight=8848860;
        double paperThicness = 0.1;
        int count=0;

        //使用while迴圈編寫
//        while(paperThicness<=peakHeight){
//            paperThicness *=2;
//            count++;
//        }

        //使用for迴圈編寫
        //這裡不可以直接使用i當作計數器, i的作用域只在for迴圈中, 出了作用域使用會報錯, 就一定得用count來計數.
        for(int i=0;i>=0;i++){
            if(paperThicness<=peakHeight){
                paperThicness *=2;
                count++;
            }else{
                break;
            }
        }

        System.out.println("張對折"+count+"次, 厚度能夠達到/超過珠峰高度");
        System.out.println("最終紙張高度是: " + paperThicness);
    }
    //答案: 
    //張對折27次, 厚度能夠達到/超過珠峰高度
    //最終紙張高度是: 1.34217728E7

}
//思考一下, while和for都可以實現迴圈,那麼使用的時候怎麼選擇呢?


3.2.5 do-while迴圈

  1. do-while迴圈

    初始化語句;
    do {
        迴圈體語句;
        條件變更語句;
    } while (條件判斷語句);
    
    
    int i = 0;
    do {
     System.out.println(“Hello World!");
     i++;
     } while( i < 3);
    
  2. do-while迴圈應用場景示例

  1. 入門案例:
package com.itheima.e_do_while;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:


/*
迴圈結構: do-while迴圈
    格式:
        初始化語句;
        do {
            迴圈體語句;
            條件變更語句;
        } while (條件判斷語句);
    執行過程:
        1. 執行一次初始化語句
        2. 執行一次迴圈體語句
        3. 執行一次條件變更語句
        4. 執行條件判斷語句
            如果不成立, 迴圈結束
            如果成立, 重覆執行2、3步驟
    特點:
        先執行1次迴圈體,再進行判斷
        也就是說: 無論迴圈條件是否成立,都會至少執行1次迴圈體
 */
public class Demo01 {
    public static void main(String[] args) {
        //需求1: 使用do-while迴圈列印5次HelloWorld
        int i=0;
        do{
            System.out.println("HelloWorld");
            i++;
        }while(i<5);

        //需求2: 說出上面程式的執行順序
//        1. 執行一次初始化語句
//        2. 執行一次迴圈體語句
//        3. 執行一次條件變更語句
//        4. 執行條件判斷語句
//                如果不成立, 迴圈結束
//        如果成立, 重覆執行2、3步驟

    }
}

3.2.6 三種迴圈的對比

  1. 三種迴圈的區別小結
  • for迴圈 和 while迴圈(先判斷後執行); do...while (先執行後判斷)
  • for迴圈和while迴圈的執行流程是一模一樣的,功能上無區別,for能做的while也能做,反之亦然。
  • 使用規範:如果已知迴圈次數建議使用for迴圈,如果不清楚要迴圈多少次建議使用while迴圈。
  • 其他區別:for迴圈中,控制迴圈的變數只在迴圈中使用。while迴圈中,控制迴圈的變數在迴圈後還可以繼續使用。
for (int i = 0; i < 3; i++ ) {
    System.out.println(“Hello World");
    }
System.out.println(i);

int i = 0;
while (i < 3) {
    System.out.println("Hello World");
    i++;
    }
System.out.println(i);

3.2.7 死迴圈

  1. 死迴圈

    • 可以一直執行下去的一種迴圈,如果沒有干預不會停下來。
  2. 死迴圈的寫法

for( ; ; ){
    System.out.println("HelloWorld");
}

//經典寫法
while(true){
    System.out.println("HelloWorld");
}

do{
    System.out.printin("HelloWorld");
}while(true);

  1. 死迴圈案例
package com.itheima.f_dead;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:


/*
    死迴圈:可以一直執行下去的一種迴圈,如果沒有干預不會停下來。

    本質上就是讓判斷條件一直成立
*/
public class Demo01 {
    public static void main(String[] args) {
        //需求1: for實現死迴圈
//        for( ; ; ){
//            System.out.println("HelloWorld!!!");
//        }

        //需求2: while實現死迴圈
//        while(true){
//            System.out.println("HelloWorld2!!!");
//        }
        //需求3: do-while實現死迴圈
        do {
            System.out.println("HelloWorld3!!!");
        } while (true);
    }

}

3.2.8 迴圈嵌套

  1. 迴圈嵌套

    • 迴圈中又包含迴圈。
    for(int i = 0; i < 3; i++) { //一共說3天
    
         for(int j = 0; j < 5; j++) {
             System.out.println("我愛你");//每天說5遍
     }
    
  2. 迴圈嵌套的特點

    • 外部迴圈每迴圈一次,內部迴圈會全部執行完一輪。
  3. 迴圈嵌套案例

package com.itheima.g_nest;


/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 */


/*
    嵌套迴圈:
        迴圈中又包含迴圈的寫法
    特點:
        外層迴圈執行1次, 記憶體迴圈執行1輪
 */
public class Demo01 {
    public static void main(String[] args) {
        //需求1: 連續說3天, 每天說5遍"我愛你"

//        for(int i=0;i<15;i++){
//            System.out.println("我愛你");
//        }

        //需求2: 連續說3天, 每天說5遍"我愛你"; 列印結果如下
        //第1天第1遍:我愛你
        //第1天第2遍:我愛你
        //...
        //第3天第5遍:我愛你
        for (int i = 1; i < 4; i++) {
            for (int j = 1; j < 6; j++) {
                System.out.println("第"+i+"天第"+j+"遍:我愛你");
            }
        }

        System.out.println("-------分割線--------");


        //需求3: 在控制台列印4行5列的矩形
        for(int i=0;i<4;i++){
            for (int j = 0; j < 5; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}


3.3 跳轉關鍵字: break、continue

3.3.1 跳轉關鍵字: break、continue 詳情

  1. 跳轉關鍵字
    • break: 跳出並結束當前所在迴圈的執行。
    • continue: 用於跳出當前迴圈的當次執行,直接進入迴圈的下一次執行。
  2. 註意事項:
    • break : 只能用於結束所在迴圈, 或者結束所在switch分支的執行。
    • continue : 只能在迴圈中進行使用。
  3. break、continue入門案例
package com.itheima.h_break_continue;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:



/*
跳轉關鍵字
    break: 用於迴圈和switch,作用是結束
    continue: 僅用於迴圈, 作用是跳過本次, 繼續下次
 */
public class Demo01 {
    public static void main(String[] args) {
        int i=1;
        while(true){
            if(i<10){
                break;
            }
            i++;
        }
        System.out.println("while迴圈以退出");

        for(int j=0;j<5;j++){
            if(j==4){
                System.out.println("當j="+j+" ,本次迴圈跳過.");
            }
        }

    }
}

3.3.2 案例: 密碼驗證

  1. 需求:

    • 系統密碼是520,請用戶不斷的從鍵盤輸入密碼進行驗證
    • 驗證不對輸出:密碼錯誤, 然後繼續讓用戶輸入
    • 驗證成功輸出:歡迎進入系統, 並停止程式。
  2. 分析:

    • 定義一個鍵盤對象
    • 定義一個整型變數記錄從鍵盤上接到的密碼
    • 使用while死迴圈,讓用戶不斷輸入數據,與正確密碼比對
    • 驗證不成功輸出:密碼錯誤
    • 驗證成功輸出:歡迎進入系統,並使用break結束當前迴圈的執行。
package com.itheima.h_break_continue;

import java.util.Scanner;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 *
/*

/*
 * 跳轉關鍵字
 * break: 用於迴圈和switch,作用是結束
 * continue: 僅用於迴圈, 作用是跳過本次, 繼續下次
 */

public class Demo02 {
    public static void main(String[] args) {
        //需求: 用戶密碼校驗
        // 系統密碼是520,請用戶不斷的從鍵盤輸入密碼進行驗證
        // 驗證不對輸出:密碼錯誤, 然後繼續讓用戶輸入
        int passWord = 520, inputPassWord = 0;
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("請輸入密碼: ");
            inputPassWord = sc.nextInt();
            if (passWord == inputPassWord) {
                break;
            } else {
                System.out.print("密碼錯誤, ");
            }
        }
        System.out.println("密碼正確, 系統登陸成功!!!");

    }
}


3.4 Random類: 生成隨機數

3.4.1 Random類 詳情

  1. 應用場景
    • 隨機點名
    • 年會抽獎
  2. Random類
    • 作用:生成隨機數。
  3. 得到0-9的隨機數的實現步驟:
    • 導包:告訴程式去JDK的哪個包中找Random
    • 寫一行代碼拿到隨機數對象
    • 調用隨機數的功能獲取0-9之間的隨機數
  4. 註意:
    • nextInt(n) 功能只能生成: 0 至 n-1之間的隨機數,不包含n。
  1. 小練習:
package com.itheima.i_random;

import java.util.Random;
/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 *
/*

/*
    Random:生成隨機數
    使用步驟
        1. 導包(IDEA會自動完成)
        2. 創建Random對象  Random r = new Random()
        3. 調用方法,獲取結果 r.nextInt(n)
            此方法可以獲取[0,n-1]之間的隨機整數, 註意: 沒有n
 */
public class Demo01 {
    public static void main(String[] args) {
        //創建隨機數對象
        Random r = new Random();
        //需求1: 獲取一個[0,9]的隨機整數
        int number = r.nextInt();
        System.out.println("隨機生成[0,9]的隨機整數為: "+ number);


        //需求2: 隨機生成[1,10]之間的隨機數,程式怎麼實現?
        number=r.nextInt(10)+1;
        System.out.println("隨機生成[1,10]之間的隨機數為: "+ number);

        //需求3: 隨機生成[33,55]之間的隨機數,程式怎麼實現?
        number= r.nextInt(23)+33;
        System.out.println("隨機生成[33,55]之間的隨機數為: "+ number);


        //規律: (大數-小數+1)+小數

    }
}

3.4.2 案例: 猜數字游戲

  1. 需求:

    • 隨機生成一個1-100之間的數據,提示用戶猜測,猜大提示過大,猜小提示過小,直到猜中結束游戲。
  2. 分析:

    • 先隨機生成一個1-100之間的數據。
    • 定義一個死迴圈讓用戶可以一直猜測。
    • 在死迴圈里,每次都提示用戶輸入一個猜測的數字,猜大提示過大,猜小提示過小,猜中則結束游戲。
  3. 詳細代碼:

package com.itheima.i_random;

import java.util.Random;
import java.util.Scanner;

/**
 * @author: LXHYouth
 * @date: 2024/3/3 11:39
 * @description:
 *
/*

/*
案例:猜數字
    隨機生成一個1-100之間的數據,提示用戶去猜測,
    用戶從鍵盤輸入猜測的數
    程式判斷: 猜大提示過大,猜小提示過小,直到猜中結束游戲。
 */
public class Demo02 {
    public static void main(String[] args) {
        //思路:
        //1. 創建Random對象
        Random random = new Random();
        //2. 創建鍵盤對象
        Scanner scanner = new Scanner(System.in);
        //3. 生成隨機數
        int number = random.nextInt(100) + 1;
        //4. 提示用戶, 輸入猜數字
        System.out.print("請輸入猜測的數字: ");

        //5. 使用while死迴圈, 實現輸入錯誤進行重新輸入
        while (true) {
            int inputNumber = scanner.nextInt();
            if (inputNumber > number) {
                System.out.println("輸入的數字大了, 請重新輸入: ");
            } else if (inputNumber < number) {
                System.out.println("輸入的數字小了, 請重新輸入: ");
            } else {
                //6. 如果猜對, 使用答對了, 使用break終止迴圈.
                System.out.println("恭喜你猜對了");
                break;
            }
        }
        System.out.println("游戲到此結束, 謝謝參與!!!");

    }

}

3.4.3 總結

  1. Random生成隨機數需要幾步?

    • 導包:import java.util.Random;
    • Random r = new Random();
    • int number = r.nextInt(10);
  2. 如何生成 小數 – 大數 之間的隨機數?

    • int number = r.nextInt(大數-小數+1) + 小數;

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用XML文件配置SSM整合。 缺點:xml解析低,降低項目響應效率。 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="ht ...
  • 訂單履約系統的概念模型 訂單:客戶提交購物請求後,生成的買賣合同,通常包含客戶信息、下單日期、所購買的商品或服務明細、價格、數量、收貨地址以及支付方式等詳細信息。 子訂單:為了更高效地進行履約,大訂單可能會被拆分成多個子訂單,子訂單會根據商品類型、配送地址、倉庫位置或供應商等因素進行拆分。 發貨單: ...
  • SSM整合就是將MVC三層架構和框架核心API組件交給SpringIoC容器管理! 一般需要配置兩個IoC容器進行三層架構組件管理。 容器名 盛放組件 web容器 web相關組件(controller,springmvc核心組件) root容器 業務和持久層相關組件(service,aop,tx,d ...
  • 代理模式(Proxy Design Pattern)在不改變原始類(或叫被代理類)代碼的情況下,通過引入代理類來給原始類附加功能。通過GPT來一探原理。 ...
  • 前言: 編程語言本身沒有優劣之分,不同的語言適合不同的場景,文中說的建議,多是站在小白要就業的立場給出的建議。 正文 我們看這張導圖,這張圖右側是前端類的語言,左側是服務端的語言: 我們先說右側。 第一個就是 JavaScript,簡稱 JS。 我強調下他和 Java 是沒有關係的,只是名字類似。 ...
  • 工業網關是一種用於連接工業設備和網路的關鍵設備,它能夠將不同協議、不同傳輸速率的工業設備連接到網路上,實現數據的傳輸和共用。不同類型的工業網關之間存在一些區別,以下是一些常見的工業網關類型及其區別: ...
  • 1. 有人說 Python 性能沒那麼 Low? 這個我用 pypy 2.7 確認了下,確實沒那麼差, 如果用 NumPy 或其他版本 Python 的話,性能更快。但 pypy 還不完善,pypy3 在 beta, 所以一般情況,我是說一般情況下,這點比較讓人不爽。 2. 有人說怎麼沒有 C#、R ...
  • 1.創建 2.配置tomcat 3.創建webapp step01,war包 step02 創建web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xml ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...