1. 程式人生 > >Java入門系列-09-迴圈結構

Java入門系列-09-迴圈結構

這篇文章為你搞懂5個問題

  1. while 迴圈如何使用
  2. do-while 迴圈的使用
  3. for 迴圈的使用
  4. break、continue 的使用
  5. 迴圈結構的巢狀使用

生活中有很多事情需要我們重複的去做,比如圍著操場跑10圈,比如寫了個爬蟲需要爬取20個頁面,這些都是迴圈。

while 迴圈

while 迴圈是一個先判斷後執行的迴圈,由迴圈條件迴圈操作組成。

語法:

while(迴圈條件){
    迴圈操作
}

敲一敲:

public class DemoWhile {
    public static void main(String[] args) {
        int i=0;//定義一個變數
        while(i<10) {//迴圈條件
            System.out.println(i);
            i++;//更新條件
        }
    }
}

迴圈條件為 true 時執行迴圈操作,為 false 時不執行

上面的程式碼中的迴圈條件是i小於10,由於i最開始時為0所以比較結果為true,進入迴圈,在迴圈操作中修改變數的值,使條件不斷更新,防止死迴圈,當i的值為10的時,迴圈條件為 false,這時候迴圈就結束了。

敲一敲:

/**
 * 計算 1-100的和
 * @author Jack
 *
 */
public class DemoSum {
    public static void main(String[] args) {
        int sum=0;//定義儲存和的變數
        int i=1;//要更新的數字
        while(i<=100) {//迴圈1-100
            sum+=i;//累加
            i++;//更新數字
        }
        System.out.println("1-100的和:"+sum);
    }
}

敲一敲:

import java.util.Scanner;

/**
 * 輸入y打招呼,輸入n結束
 * @author Jack
 *
 */
public class DemoWhileInput {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("輸入y打招呼,輸入n結束");
        char choose=input.next().charAt(0);
        while('y'==choose) {//char型別的比較使用 ==
            System.out.println("hello");
            System.out.println("輸入y打招呼,輸入n結束");
            choose=input.next().charAt(0);
        }
        System.out.println("迴圈結束");
    }
}

do-while迴圈

do-while迴圈執行的特點是先執行後判斷,先執行 do 程式碼塊中的程式碼,迴圈條件為 true時繼續執行 do 程式碼塊,為 false 時結束迴圈。

語法:

do{
    迴圈操作
}while(迴圈條件);

敲一敲:

public class DemoDoWhileSum {
    public static void main(String[] args) {
        int sum=0;//用於儲存求和後的值
        int i=1;
        do {
            sum+=i;
            i++;
        } while (i<=100);
        System.out.println("1-100的和為:"+sum);
    }
}

上面 while 迴圈中的打招呼的程式碼改用 do-while 更合適,下面的程式碼會先打招呼,然後詢問是否繼續,輸入y將繼續

敲一敲:

import java.util.Scanner;

public class DemoDoWhile {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        char choose=' ';
        do {
            System.out.println("hello");
            System.out.println("輸入y繼續打招呼,輸入n結束");
            choose=input.next().charAt(0);
        }while(choose=='y');
        System.out.println("迴圈結束");
    }
}

for 迴圈

對於固定次數的迴圈,使用 for 將更加簡潔

語法:

for(引數初始化;條件判斷;更新迴圈變數){
    迴圈操作
}

1.先執行引數初始化 2.然後進行條件判斷,如果為 true 執行第3步,為 false 將結束迴圈 3.執行迴圈操作 4.更新迴圈變數,然後再次進入第2步進行條件判斷

敲一敲:

public class DemoFor {
    public static void main(String[] args) {
        //列印1-100的數
        for(int i=1;i<=100;i++) {
            System.out.println(i);
        }
    }
}

引數初始化和更新變數可以同時操作多個變數,像 i++,j-- 這樣用 , 隔開

import java.util.Scanner;

public class DemoAddTable {
    public static void main(String[] args) {
        System.out.println("請輸入一個值:");
        Scanner input=new Scanner(System.in);
        int val=input.nextInt();
        for(int i=0,j=val;i<=val;i++,j--) {
            System.out.println(i+" + "+j+"="+(i+j));
        }
    }
}

在 for 迴圈中兩個 ; 不能省略 如果省略迴圈條件將造成死迴圈 引數初始化可以省略,但要放在迴圈的上面,保證變數的可用 更新迴圈變數可以省略,但要放在迴圈裡面,保證變數的更新不會導致死迴圈

break 和 continue

break:改變程式控制流程,用於 do-while、while、for、switch,跳出結構執行結構後面的語句。

敲一敲:

import java.util.Scanner;

public class DemoBreak {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        while(true) {
            System.out.println("是否繼續遊戲?輸入任意繼續,輸入no結束:");
            String goon=input.next();
            if ("no".equals(goon)) {//字串之間的比較使用 equals
                break;
            }
        }
        System.out.println("結束");
    }
}

這裡的迴圈條件為 true,也就是一個死迴圈,但在迴圈過程中如果輸入 no 將執行 break ,那麼這個迴圈也就結束了。

continue:只能用在迴圈中,跳過迴圈體中剩餘的語句而執行下一次迴圈。

敲一敲:

import java.util.Scanner;

/**
 * 統計年齡大於16的人數
 * @author Jack
 *
 */
public class DemoContinue {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("請輸入學員數量:");
        int pnum=input.nextInt();//學員總人數
        int num=0;//儲存年齡大於16的人數
        for(int i=1;i<=pnum;i++) {
            System.out.println("請輸入第 "+i+" 位學員的年齡:");
            int age=input.nextInt();
            if (age<17) {
                continue;//跳過後面程式碼,繼續下一次迴圈
            }
            num++;
        }
        System.out.println("年齡大於16的人數:"+num);
    }
}

迴圈巢狀

巢狀迴圈的特點:外層迴圈執行一次,內層迴圈執行一遍,各種迴圈可以任意巢狀,下面使用 for 迴圈演示列印矩形。 語法:

while(……){
    for(……;……;……){
        
    }
}

do{
    while(……){
        
    }
}while(……);


for(……;……;……){
    do{
        
    }while(……);
}

……

敲一敲:

import java.util.Scanner;

public class DemoRectangle {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("輸入要列印的行數:");
        int line=input.nextInt();//行數
        System.out.println("輸入要列印的列數:");
        int column=input.nextInt();
        //外層迴圈控制行數,內層迴圈控制列數
        for (int i = 1; i <= line; i++) {
            for (int j = 1; j <= column; j++) {
                System.out.print("* ");//不換行列印
            }
            //列印完所有的列後換行
            System.out.println();
        }
        
    }
}

敲一敲:

/**
 * 列印一個三角形
 * @author Jack
 *
 */
public class DemoDelta {
    public static void main(String[] args) {
        for(int i=1;i<=5;i++) {//外層迴圈控制行
            for (int j = 1; j <= i; j++) {//內層迴圈控制列的條件
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

列印一個5行的三角形,外層的迴圈控制行數,所以條件是 i<=5 。列和行的條件是什麼?第一行1個,第二行2個,第三行3個*,所以條件為 j<=i

試一試

1.使用巢狀迴圈列印倒三角形

2.使用巢狀迴圈列印99乘法表

1*1=1  
1*2=2 2*2=4  
……  
1*8=8 2*8=16 ……  
1*9=9 2*9=18 …… 9*9=81

鼓勵你在留言中釋出自己的答案,與其他人一起交流,並在百度上搜索相關問題

掃碼關注"享智同行"回覆"009"獲取答案和解析