程式中常會有一些必須重複執行的指令或動作,例如輸入一串文字,讓程式在文字中尋找符合的字元,此時程式必須對輸入的文字依字元重複進行比對的動作,直到找到符合的字元後結束這個重複性的動作,在 Java 中,您可以使用 while 迴圈或是 do while 迴圈來為您完成重複性的動作。
先來看看 while 迴圈的語法:
while (boolean_expression) { code_block; } // while 結尾 } // 程式從這裡繼續
所有的迴圈是由下面的部分所構成的:
由於進入 while 結構時,一開始就會先進行運算式的判斷,以決定要不要執行迴圈本體(Body),所以 while 迴圈又稱為前測式迴圈,來看個實際的例子,程式碼 7-1 可以讓您輸入一個整數值,程式會依您輸入的值來輸出對應次數的"Hello!World!"。
public class WhileDemo{ public static void main(String[] args){ java.util.Scanner scanner = new java.util.Scanner(System.in); System.out.print("輸入執行次數:"); int input = scanner.nextInt(); int count = 0; // 計數用 while (count < input){ // 判斷次數 System.out.println("Hello!World!"); count++; // 每次執行後遞增 } } }程式碼 7-1 WhileDemo.java
當計數器 count 的值小於 input 的值時,while 迴圈的本體才會執行,每次執行完迴圈前都會遞增 count,直到 count 的值大於 input 的值,此時 count < input 的運算結果為 false,程式離開迴圈。
程式碼 7-1 的執行範例如下所示:
思考如果想要畫一個如下的矩形,並且一次畫一個字元,則該如何實現:
@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@
您可以利用 while 圈畫出矩形的一行。然後,將迴圈放至於另外一個迴圈內連續畫出三行。這樣的迴圈結構稱為巢狀 while 迴圈( Nested while loop )。
程式碼 7-2 讓您可以輸入兩個整數,之後根據這兩個數值為長寬,並利用@符號印出矩形:
public class NestedWhileDemo{ public static void main(String[] args){ java.util.Scanner scanner = new java.util.Scanner(System.in); System.out.print("輸入長:"); int length = scanner.nextInt(); System.out.print("輸入寬:"); int width = scanner.nextInt(); int widthCount = 0; while (widthCount < width){ int lengthCount = 0; while (lengthCount < length){ System.out.print("@"); lengthCount++; } System.out.println(); // 換行 widthCount++; } } }程式碼 7-2 NestedWhileDemo.java
在進入外層迴圈之後,會再遇到內層迴圈,內層迴圈會一直執行到 lengthCount < length 為 false 後離開迴圈,並繼續完成外層迴圈的本體,之後外層迴圈的 widthCount < width 若還是為 true,就會再進行相同的流程,直到外層迴圈的widthCount < width 為 false 而離開迴圈,執行的範例結果如下所示:
來考慮一個問題,在每次執行迴圈之前,您會想要請使用者輸入一些資訊,之後再根據使用者輸入的資訊來執行迴圈,並依據執行結果來判斷是否該離開迴圈。像這種先執行、後判斷的迴圈,您可以使用 do while 迴圈來完成,它的語法結構如下所示:
do { code_block; } while (boolean_expression);
其中:
註
boolean_expression 之後的分號是必要的。因為這boolean_expression 是在這迴圈末端。相反地,在 while 迴圈中並不在結尾加上分號,因為 while 迴圈是在一開始就決定是否要進入 code_block。
由於先執行,後判斷,所以 do while 又稱之為後測式迴圈。程式碼 7-3 使用 do while 迴圈設計一個簡單的猜數字程式,do 區塊中每次會先請使用者輸入一數字,遇到 while 時再依使用者的輸入判斷是否要執行下一次迴圈。
public class DoWhileDemo{ public static void main(String[] args){ java.util.Scanner scanner = new java.util.Scanner(System.in); int input = 0; do{ System.out.print("輸入數字:"); input = scanner.nextInt(); } while (input != 30); System.out.println("恭喜您!猜對了!"); } }程式碼 7-3 DoWhileDemo.java
程式的執行結果如下所示:
do while 迴圈同樣也可以像 while 迴圈一樣形式巢狀結構,也就是 do while 中再撰寫 do while 迴圈。