2-4 Java流程控制——迴圈語句

愛學習的朵朵降臨人世間發表於2020-09-26

流程控制

總結了一下好幾天前學習的流程控制的筆記。

一、接收使用者輸入

使用Java內部提供的Scanner類,用於接收使用者鍵盤輸入。Java所提供的一個工具,其中封裝了許多方法,每個方法都有不同的功能可供我們使用。

  • 語法格式:型別 變數 = new 類(引數)

    Scanner input = new Scanner(System.in);
    //用於接收各種資料型別:
    int i = input.nextInt();
    //nextLine方法不要與其他next方法同時使用
    String str1 = input.next();
    String str2 = input.nextLine();

    new:建立、引用資料型別的物件,可認為是變數值。(物件在後面學到)

    System.in:掃描系統的輸入

二、執行結構概述

任何簡單和複雜的演算法都可以由順序結構、分支結構和迴圈結構這三種基本結構組成。

  1. 順序結構

    按照語句的出現順序執行

  2. 分支結構

    程式執行時出現分支,根據條件成立與否判斷選擇哪一條分支

  3. 迴圈結構

    需要重複執行、運算的一些操作,重複執行某一迴圈體,直到條件不滿足結束

    • 例如:寫一個程式計算每個人的考試成績,此時多次的累加就需要重複執行,這時就可以寫一個迴圈結構
    • 注意:一般來說,迴圈執行結構一定要有出口

三、if分支

if條件語句:如條件符合,則執行XX程式碼語句
條件語句為Boolean結果表示式

  • 語法格式(4種)

    //1.如果條件結果為true,則執行體(大括號中的程式碼)執行
    if(條件語句){...}
    
    //2.如果條件結果為true,則執行體執行,否則執行else後面的語句
    if(條件語句){...}else{...}
    
    //3.兩個條件,若滿足if條件則執行體執行並結束;若不滿足if條件,判斷else if條件,滿足則執行else if執行體語句
    if(條件語句){}else if(條件語句){}
    
    //4.判斷是否滿足條件,滿足則執行體執行並結束,若前面的條件都不滿足,執行最後的else執行體
    if(條件語句){}else if(條件語句){}else{} 
  • 例1:判斷成績是否合格

    if(s >= 60) {
        System.out.println("成績合格");
    } else {
        System.out.println("成績不合格");
    }
  • 例2:判斷成績等級

    if(s > 120 || s < 0) {
    	System.out.println("成績輸入有誤");
    } else if(s >= 90) {
         System.out.println("優");
    } else if(s >= 80) {
         System.out.println("良");
    } else if(s >= 70) {
         System.out.println("中");
    } else if(s >= 60) {
         System.out.println("及格");
    } else {
         System.out.println("不及格");
    }

四、switch

  • 語法格式:

    //switch塊裡包含case,表示如果表示式的結果滿足取值n,則執行語句塊n,直到遇見break關鍵字,跳出這個選擇繼續執行下方程式碼;若所有case都不匹配,則執行default中語句塊n+1,直到遇見break
    switch(表示式){ 
        case取值1:語句塊1;break; 
        case取值n:語句塊n;break; 
        default:語句塊n+1;break; 
    } 
  • 規則

    • 表示式的結果是int、byte、char、short、String型別
    • case子句中的取值必須是常量(不會變化的值),且不能重複
    • case後面的執行體可寫{}也可以不寫{}
    • default子句是可選的,可以不寫,不寫時若沒有匹配的case則switch語句不會進行任何操作
  • 特殊情況:若case1子句最後沒寫break,則不管是否與case2匹配,都會繼續執行case2語句,直到遇見break才會跳出選擇。

  • 例:根據使用者輸入月份來判斷季節

    switch(month) {
        case 1:
        case 2:
        case 3:
            System.out.printlb("春季");
            break;
        case 4:
        case 5:
        case 6:
            System.out.printlb("夏季");
            break;
        case 7:
        case 8:
        case 9:
            System.out.printlb("秋季");
            break;
        case 10:
        case 11:
        case 12:
            System.out.printlb("冬季");
            break;
        default:
            System.out.println("輸入的月份有誤,請檢查!");
            break;
    }

五、迴圈_while

和if語句類似,條件滿足就執行某段程式碼。

  1. 迴圈語句功能

    在迴圈條件滿足的情況下,反覆執行特定程式碼

  2. 迴圈語句分類:(3類)

    for迴圈

    while迴圈

    do/while迴圈

while迴圈

  • 先判斷,若符合條件,迴圈繼續執行,否則迴圈退出。

  • 語法格式:

    while(條件表示式){ 
        //語句塊; 
    }
  • 使用while迴圈的步驟

    1. 分析迴圈條件(迴圈次數)和迴圈操作(迴圈內容)
    2. 套用while語法寫出程式碼
    3. 檢查迴圈是否能夠退出
    int i = 0;
    while(i < 10) {
        //更新迴圈變數
        i++;
        System.out.println("迴圈:"+i);
    }
  • 例:錄入班級人數和學員成績,計算班級學員的平均成績

    //s使用變數studentNum記錄班級總人數
    int studentNum = input.nextInt();
    //用於記錄迴圈的次數,以及控制迴圈何時結束
    int i = 0;
    //定義變數sum,用於統計總分數
    int sum = 0;
    whlie(i < studentNum) {
        i++;
        System.out.println("請輸入第"+i+"個學生的成績:");
        int s = input.nextInt();
        sum += s;
    }
    System.out.println("學生的平均成績為"+sum/studentNum);

六、do while迴圈

先執行,再判斷。

  • 語法格式
    do {
    	迴圈操作
    } while (條件表示式);

while和do while的區別:

區別在於第一次判斷是否成立,不成立時:while程式不執行,直接結束;do while程式先執行一次執行體中的內容再結束。

while是先判斷,如果滿足條件則繼續執行,否則退出。do while是先執行一次迴圈體,再判斷,如果滿足條件繼續執行,否則退出。

do while的應用場景比while迴圈少很多,常用於要做第一次操作。

七、for迴圈

  • 例:列印文字從0~9

  • while迴圈:

    int i = 0
    while (i < 10) {
        System.out.println(i);
        i++;
    }
  • for迴圈:

    //for ([定義迴圈變數];[判斷迴圈條件];][更新迴圈變數]) {}
    for (int i = 0;i < 10;i++) {
        System.out.println(i);
    }
    for(;;){}//(;;)相當於(;true;)死迴圈

i:控制迴圈次數的迴圈變數,值一直會變化
判斷迴圈條件,條件滿足一直迴圈執行,條件不滿足迴圈結束。
i++:更新迴圈變數

八、迴圈巢狀圖形列印

經常用來執行一些複雜運算

  • 語法格式:
    //外層迴圈控制內層迴圈執行10次
    for(int i = 0; i < 10; i++) {
        //內層迴圈也會執行10次
        for(int j = 0;j < 10;j++) {
            //總共執行100次
        }
    }
  • 例:用迴圈列印一個10行10列的*圖形
    //外層迴圈控制行數
    for(int i = 0; i < 10; i++) {
        //System.out.println("* * * * * * * * * *");
        //內層迴圈控制列數
        for(int j = 0;j < 10;j++) {
    		System.out.print("* ");
        }
        System.out.println();
    }

九、break與continue

迴圈的退出:break和continue
都能用於退出迴圈
break用於結束迴圈,continue用於結束一輪迴圈中的某一次

  • 例:
    for(int i =0;i < 10;i++) {
        if(i==5) {
            //break結果為0 1 2 3 4
            //break;
            //continue結果為0 1 2 3 4 6 7 8 9
            continue;
        }
        System.out.println(i);
    }

區別:i=5時,continue結束了那一次迴圈,然後繼續i++往下執行,從6繼續。break直接結束所有迴圈。

十、如何退出多重迴圈

for(int i = 0;i < 10;i++) {
    //給迴圈起別名
    bieming:for(int j = 0;j < 10;j++) {
        System.out.println("i="+i+",j="+j);
        if(i == 5 && j == 5) {
            break bieming;
        }
    }
}

當想要退出n重迴圈時,只需要給迴圈起一個別名(任意字母),當觸發某條件時,跳出該別名的迴圈即可。

十一、圖形列印詳解

巢狀迴圈列印圖形以什麼思路思考?
外層迴圈控制行數,內層迴圈控制列數。

  • 圖形1:
    *
    ***
    *****
    *******
    
  • 解決方案:
    外層迴圈:4
    內層迴圈:第一行時迴圈1次,第二行時迴圈3次,第三行時迴圈5次,第四行時迴圈7次。
    for(int i = 0;i < 4;i++) {
        for(int j = 0;j < i * 2 + 1;j++) {
            System.out.print("*");
        }
        System.out.println();
    }

控制行直接數多少行即可,控制列要找到規律,並通過迴圈條件判斷。

  • 圖形2:

       *
      ***
     *****
    *******
    
  • 解決方案:
    外層迴圈:4
    內層迴圈1:控制空格的列數,第一行時3個空格,第二行時2個空格,第三行時1個空格,第四行時0個空格。
    內層迴圈2:控制*的列數,第一行時迴圈1次,第二行時迴圈3次,第三行時迴圈5次,第四行時迴圈7次。

    for(int i = 0;i < 4;i++) {
        //i:0 1 2 3
        for(int j = i+1;j < 4;j++) {
            System.out.print(" ");
        }
        for(int j = 0;j < i*2+1;j++) {
             System.out.print("*");
        }
        System.out.println();
    }
  • 圖形3:

       *
      ***
     *****
    *******
     *****
      ***
       *
    
  • 解決方案:和圖形三一樣的,就是反過來了。

    for(int i = 0;i < 4;i++) {
        for(int j = i + 1;j < 4;j++) {
            System.out.print(" ");
        }
        for(int j = 0;j < i*2+1;j++) {
            System.out.print("*");
        }
        System.out.println();
    }
    for(int i = 0;i < 3;i++) {
        for(int j = 0;j < i+1;j++) {
            System.out.print(" ");
        }
        for(int j = 6;j > i*2+1;j--) {
            System.out.print("*");
        }
        System.out.println();
    }
  • 圖形四:思考ing

       *
      * *
     *   *
    *     *
     *   *
      * *
       *
    

十二、判斷使用者輸入型別

在接收使用者輸入的資料前判斷資料型別

if(input.hasNextInt()) {
    ...
} else {
    System.out.println("輸入型別錯誤");
}

總結

流程控制是相當重要的一個內容,幾天沒看就不熟悉了,這個腦子。多看多記多練習!!!

相關文章