java學習之迴圈語句
1 迴圈語句 while
while迴圈語句和選擇結構if語句有些相似,都是根據條件判斷來決定是否執行大括號內的執行語句。區別在於,while語句會反覆地進行條件判斷,只要條件成立,{}內的執行語句就會執行,直到條件不成立,while迴圈結束。
它的語法結構如下:
while(迴圈條件){
執行語句
………
}
接下來通過一段程式碼,來實現列印1~4之間的自然數,WhileDemo.java
public class WhileDemo { public static void main(String[] args) { int x = 1; // 定義變數x,初始值為1while (x <= 4) { // 迴圈條件 System.out.println("x = " + x); // 條件成立,列印x的值 x++; // x進行自增 } } }
執行結果如下圖:
在上述程式碼中,x初始值為1,在滿足迴圈條件x <= 4的情況下,迴圈體會重複執行,列印x的值並讓x進行自增。因此列印結果中x的值分別為1、2、3、4。
大家要注意的是,程式碼x++用於在每次迴圈時改變變數x的值,從而達到最終改變迴圈條件的目的。如果沒有這行程式碼,整個迴圈會進入無限迴圈的狀態,永遠不會結束。
2 迴圈語句 for
for迴圈語句是最常用的迴圈語句,一般用在迴圈次數已知的情況下。for迴圈語句的語法格式如下:
for(初始化表示式; 迴圈條件; 操作表示式){
執行語句
………
}
在上面的語法結構中,for關鍵字後面()中包括了三部分內容:初始化表示式、迴圈條件和操作表示式,它們之間用“;”分隔,{}中的執行語句為迴圈體。
接下來分別用①表示初始化表示式、②表示迴圈條件、③表示操作表示式、④表示迴圈體,通過序號來具體分析for迴圈的執行流程。具體如下:
for(① ; ② ; ③){
④
}
第一步,執行①
第二步,執行②,如果判斷結果為true,執行第三步,如果判斷結果為false,執行第五步
第三步,執行④
第四步,執行③,然後重複執行第二步
第五步,退出迴圈
接下來通過一個案例對自然數1~4進行求和,如下所示。ForDemo01.java
public class ForDemo01 { public static void main(String[] args) { int sum = 0; // 定義變數sum,用於記住累加的和 for (int i = 1; i <= 4; i++) { // i的值會在1~4之間變化 sum += i; // 實現sum與i的累加 } System.out.println("sum = " + sum); // 列印累加的和 } }
執行結果如下:
3 迴圈語句 do...while
do…while迴圈語句和while迴圈語句功能類似,其語法結構如下:
do {
執行語句
………
} while(迴圈條件);
在上面的語法結構中,關鍵字do後面{}中的執行語句是迴圈體。do…while迴圈語句將迴圈條件放在了迴圈體的後面。這也就意味著,迴圈體會無條件執行一次,然後再根據迴圈條件來決定是否繼續執行。
接下來使用do…while迴圈語句來實現列印1~4之間的自然數DoWhileDemo.java。
public class DoWhileDemo { public static void main(String[] args) { int x = 1; // 定義變數x,初始值為1 do { System.out.println("x = " + x); // 列印x的值 x++; // 將x的值自增 } while (x <= 4); // 迴圈條件 } }
執行結果:
我們發現WhileDemo.java與DoWhileDemo.java執行的結果一致,這說明什麼呢?這說明do …while迴圈和while迴圈能實現同樣的功能。然而在程式執行過程中,這兩種語句還是有差別的。如果迴圈條件在迴圈語句開始時就不成立,那麼while迴圈的迴圈體一次都不會執行,而do…while迴圈的迴圈體還是會執行一次。若將DoWhileDemo.java中的迴圈條件x<=4改為x < 1,DoWhileDemo.java執行結果會列印x=1,而WhileDemo.java執行結果什麼也不會列印。
4 無限迴圈(死迴圈)
最簡單無限迴圈格式:
while(true){} 用ctr +c結束
無限迴圈存在的原因是並不知道迴圈多少次,而是根據某些條件,來控制迴圈。
5 迴圈巢狀
巢狀迴圈是指在一個迴圈語句的迴圈體中再定義一個迴圈語句的語法結構。while、do…while、for迴圈語句都可以進行巢狀,並且它們之間也可以互相巢狀,如最常見的在for迴圈中巢狀for迴圈,格式如下:
for(初始化表示式; 迴圈條件; 操作表示式) {
………
for(初始化表示式; 迴圈條件; 操作表示式) {
執行語句
………
}
………
}
接下來通過一個練習,來實現使用“*”列印直角三角形,如下所示。ForForDemo.java
1 public class ForForDemo { 2 public static void main(String[] args) { 3 int i, j; // 定義兩個迴圈變數 4 for (i = 1; i <= 9; i++) { // 外層迴圈 5 for (j = 1; j <= i; j++) { // 內層迴圈 6 System.out.print("*"); // 列印* 7 } 8 System.out.print("\n"); // 換行 9 } 10 } 11 }
執行結果如下:
在上述程式碼中定義了兩層for迴圈,分別為外層迴圈和內層迴圈,外層迴圈用於控制列印的行數,內層迴圈用於列印“*”,每一行的“*”個數逐行增加,最後輸出一個直角三角形。