亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Java 循環語句

循環結構能夠讓程序員以最少的精力去完成大量重復的工作,它可以讓計算機根據條件做循環計算,當條件成立時繼續循環,當條件不成立時結束循環。

依據前面所學的知識,如果我們想在屏幕上依次打印1到5,可以編寫以下程序:

實例演示
預覽 復制
復制成功!
// PrintNums.java
class PrintNums {
    public static void main(String[] args) {
      	// 依次打印1到5
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
        System.out.println("4");
        System.out.println("5");
    } 
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1
2
3
4
5

但是這種編寫代碼的方案存在一些弊端:

  • 不靈活:如果我們想要更改需求,打印從6到10,那么就不得不逐行更改;
  • 難于維護:如果有大量代碼,更容易產生bug;
  • 伸縮性差:依次打印從1到5貌似很簡單,如果需求變為打印從1到100呢?這意味著需要編寫大量的代碼。

使用循環結構,就可以解決上述弊端。下面我們打開代碼編輯器,新建一個LoopPrintNums.java,復制如下代碼:

實例演示
預覽 復制
復制成功!
// LoopPrintNums.java
class LoopPrintNums {
    public static void main(String[] args) {
        for(int i = 1; i <= 10; i ++) {
            System.out.print(i + "\t");
        }
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1	2	3	4	5	6	7	8	9	10	

聰明的你可能發現,如果將i <= 10改為 i <= 100,屏幕將依次從1打印100。
上述代碼中,我們看到不需要再去編寫多條打印語句,同樣得到了我們想要的結果,代碼量大大減少。那么上述代碼具體有什么含義呢,為什么這樣寫就實現了多個數字的打印呢?在本小節中,我們就會進行詳細介紹。

1. while 循環

1.1 語法

while循環是最簡單的循環形式。我們先來看看它的基本用法:

while (條件) {
    // 循環體,條件成立時執行
    ...
}
// 循環完成后執行

while循環在每次循環開始前,首先會判斷條件是否成立,如果計算結果為true, 就會執行循環體內部語句。如果計算結果為false,會跳出循環,執行后續代碼。

1.2 實例

對于打印從1到5的例子,可以使用while循環可以這樣寫:

實例演示
預覽 復制
復制成功!
public class WhileLoop1 {
    public static void main(String args[]) {
        int i = 1;
        while (i <= 5) {
            System.out.println(i); // 打印i
            i ++; // i自增1
        }
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

你也許注意到在循環體內部,除了打印變量i的值,還有一個語句:i ++,這個語句的作用是讓變量i自增1。如果沒有這個語句,i的值永遠不會改變,所以循環條件永遠成立,程序將陷入死循環,直到將資源耗盡才會停止,所以要杜絕編寫死循環代碼。

Tips:如果循環的條件永遠不會變成 false(比如使用字面量true作為條件),則稱這種循環為無限循環或死循環。循環體內的代碼會無限地重復執行,直到中斷。

再看一個例子,得到1到100的累加和:

實例演示
預覽 復制
復制成功!
public class WhileLoop2 {
    public static void main(String[] args) {
        int sum = 0; // 累加和
        int i = 1;
        while (i <= 100) {
            sum = sum + i; // 使sum和i相加,并將值再次賦值給sum
            i ++; // i自增1
        }
        System.out.println("1到100的累加和為:" + sum);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1到100的累加和為:5050

我們來對程序進行解析:

  1. 定義兩個變量sumi分別用于存放累加和以及要累加的數字
  2. 循環開始前判斷條件 i <= 100是否成立,此時 i = 1,成立,執行循環體內代碼。
  3. 循環體內代碼第一次執行,sum = 1i 自增1變為2。
  4. 再次判斷循環條件,成立就繼續執行循環體,直到 i = 100,自增1 變為101,此時條件不成立。執行循環后面的代碼。
  5. 執行打印語句,打印最終的 sum值,程序結束。

2. do while 循環

2.1 語法

do while循環的功能與while循環類似,不同點在于:while循環是先判斷條件,再執行循環體;而do while 循環則是先執行循環體,再判斷條件,如果條件成立繼續執行循環,條件不成立則終止循環。do while循環的語法如下:

do {
    // 循環體
} while (條件);

無論條件成立與否,do while循環都至少執行一次。而while循環可能一次都不會執行。

2.2 實例

我們現在使用 do while循環實現1到100的累加求和,代碼如下:

實例演示
預覽 復制
復制成功!
public class DoWhileLoop {
    public static void main(String[] args) {
        int sum = 0; // 累加和
        int i = 1;
        do {
            sum = sum + i; // 使sum和i相加,并將值再次賦值給sum
            i ++; // i自增1
        } while (i <= 100);
        System.out.println("1到100的累加和為:" + sum);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1到100的累加和為:5050

3. for 循環

3.1 語法

下面是for循環的語法結構:

for (變量聲明; 條件; 迭代語句) {
    // 循環體
}

for循環是一種特殊的while循環,也是被使用最廣泛的循環。它使用計數器來實現循環。在關鍵字 for后面的括號中,會有三個語句,第一個語句是變量聲明語句,允許聲明一個或多個整型變量;第二個語句是條件,條件的檢測方式與while循環相同(每次循環開始前判斷條件成立與否);第三個語句是迭代語句,雖然可以是任何語句,但該語句通常用于遞增或遞減變量。

3.2 實例

我們使用for循環連續打印5行”慕課網真棒“的字樣,代碼如下:

實例演示
預覽 復制
復制成功!
public class ForLoop1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i ++) {
            System.out.println("慕課網真棒");
        }
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

慕課網真棒
慕課網真棒
慕課網真棒
慕課網真棒
慕課網真棒

我們現在使用for來實現1到100的累加求和,代碼如下:

實例演示
預覽 復制
復制成功!
public class ForLoop2 {
    public static void main(String[] args) {
        int sum = 0; // 累加和
        for (int i = 1; i <= 100; i ++) {
            sum += i; // 加和賦值運算
        }
        System.out.println("1到100的累加和為:" + sum);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1到100的累加和為:5050

程序解析:

在執行循環體前,會先執行括號中的變量聲明語句int i = 1,它定義了一個計數器變量i并且賦值為1(注意這個語句只執行一次)。然后會執行條件判斷語句i <= 100,顯然條件成立,執行循環體,循環體執行完成后會才會執行括號中的第三個語句i ++,再次判斷條件是否成立,直到當i的值為100時,最后一次執行循環體,這個時候i再次自增1101,條件不成立,結束循環。

實際使用中,通常使用for循環來遍歷一個數組,我們將在 Java 數組小節舉例介紹。

for循環中第一個語句,變量聲明語句可以一次聲明多個整型變量,實例代碼如下:

實例演示
預覽 復制
復制成功!
public class ForLoop2 {
    public static void main(String[] args) {
        for (int i = 1, j = 10; i <= 10; i++, j--) {
            System.out.print(i + "\t");
            System.out.print(j + "\t");
        }
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1	10	2	9	3	8	4	7	5	6	6	5	7	4	8	3	9	2	10	1

另外,for循環還可以缺省變量聲明語句、循環條件和迭代語句,實例:

// 缺省變量聲明語句
for (int i = 0; ; i ++) {
    // 語句
}
// 缺省循環條件語句和迭代語句
for (int i = 0; ; ) {
    // 語句
}
// 缺省所有語句
for (;;) {
    // 語句
}

但請注意,通常情況下不建議這樣寫。

4. for each 循環

由于學習 for each 循環需要一些數組和集合的前置知識,我們將會在 Java 數組小節舉例講解。

5. break 和 continue 關鍵字

我們可以使用breakcontinue語句來重定向程序執行流。

5.1 break

break關鍵字可以出現在一個循環中,用以跳出當前循環。我們來看一個實例:

實例演示
預覽 復制
復制成功!
public class BreakKeywords1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i ++) {
            if(i == 3) { // 條件語句
                System.out.println("當i等于3時,終止循環!");
                break;
            }
            System.out.println(i);
        }
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1
2
當i等于3時,終止循環!

上面是一段循環打印數字的代碼,當循環到達第3次迭代時,執行條件分支中的語句,將終止循環。注意:break語句通常配合if語句使用。

對于多層循環的情況,break語句只能終止它自己所在的那一層循環,并不會影響到外層循環。請閱讀如下代碼:

實例演示
預覽 復制
復制成功!
public class BreakKeywords2 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i ++) {
            // 打印i的值
            System.out.println(i);
            for (int j = 1; j<=5; j ++) {
                if(j == 3) { // 條件語句
                    System.out.println("當j等于3時,終止循環!");
                    break;
                }
                // 打印j的值
                System.out.println(j);
            }
        }
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1
1
2
當j等于3時,終止循環!
2
1
2
當j等于3時,終止循環!
3
1
2
當j等于3時,終止循環!
4
1
2
當j等于3時,終止循環!
5
1
2
當j等于3時,終止循環!

上面的代碼有兩個for循環嵌套,break語句位于內層循環,所以當表達式j == 3成立時,會跳出內層循環,進而繼續執行外層循環。

5.2 continue

continue關鍵字可以跳過當次循環,繼續執行下一次循環,我們來看一個實例:

實例演示
預覽 復制
復制成功!
public class ContinueKeywords {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i ++) {
            if(i == 3) {
                System.out.println("當i等于3時,跳過~");
                continue;
            }
            System.out.println(i);
        }
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結果:

1
2
當i等于3時,跳過~
4
5

在多層嵌套的循環中,continue語句只能跳過它自己所在位置的循環。

6. 小結

本節中,我們依次介紹了Java中的四種循環結構:while循環、do while循環、for循環以及for each循環。并且介紹了breakcontinue關鍵字在循環中的使用。

其中,while循環的循環體可能一次都不執行,而do while循環的循環體至少執行一次。

for 循環通過計數器實現復雜循環。for each循環可以直接遍歷數組的每個元素。

在使用循環結構編寫業務代碼時,為了避免死循環,一定要確保循環條件能夠被影響。