程式 (program) 中的迴圈 (loop) 就是在特定程式區塊 (block) 中,重複執行相同的工作
Java 中有兩種迴圈,一種是 while 迴圈 (while loop) ,另一種則是 for 迴圈 (for loop) ,兩種迴圈可以互相替代,端視自己喜歡用哪一種囉!我們先來看看 while 迴圈的寫法
int i = 10; // 設定控制變數 | |
while (i > 0) { | |
// 迴圈工作區 | |
System.out.println(i); | |
i--; // 調整控制變數值 | |
} |
這個迴圈所進行的工作很簡單,先在命令列上印出 10 ,然後一路倒數到 1 為止。迴圈有三個地方要注意
- 設定控制變數
- 條件
- 調整控制變數值
while 迴圈的控制變數 (control variable) 必須在 while 之前就先設定好,此例中將控制變數 i 設定為 10 。然後進入 while 的地方,條件 (condition) 就在 while 之後的小括弧中,此例的條件為當控制變數 i 大於 0 時,迴圈便會重複執行。迴圈工作區,也就是 while 之後用大括弧圍住的程式區塊,這裡,我們只有簡單的印出控制變數 i 的值,另外,最後需要有調整控制變數值的地方。
我們先寫成完整的範例,來編譯 (compile) 看看結果吧!
001 | public class WhileDemo { |
002 | public static void main(String[] args) { |
003 | System.out.println(); |
004 | int i = 10; // 設定控制變數 |
005 | while (i > 0) { |
006 | // 迴圈工作區 |
007 | System.out.println(i); |
008 | i--; // 調整控制變數值 |
009 | } |
010 | System.out.println(); |
011 | } |
012 | } |
013 | |
014 | /* 檔名: WhileDemo.java |
015 | 作者: Kaiching Chang |
016 | 時間: September, 2014 */ |
編譯執行結果如下
當我們明確知道重複次數的時候,我們得利用控制變數來記錄 while 迴圈所進行次數,這樣 while 迴圈才會有結束的一天,不然若是漏了任一與控制變數相關的部份時,就有可能導致無窮迴圈 (infinite loop) 的發生,例如
int i = 10; // 設定控制變數 | |
while (i > 0) { | |
// 迴圈工作區 | |
System.out.println(i); | |
// 沒有調整控制變數值 | |
} |
這樣一來,控制變數 i 永遠大於 0 ,所以迴圈會一直重複執行,此例中會不斷的在命令列印出 10 ,直到強制結束程式執行為止。
以上的 while 迴圈是介紹有明確重複次數的用法,若是迴圈沒有明確重複次數,那就得另行設計結束迴圈的方式,例如控制變數等於某一個值之時,再利用 break 跳出迴圈。
另外一個 for 迴圈則是把控制變數的設定、迴圈結束條件、控制變數的調整全都寫在小括弧之中,如下
for (int i = 10; i > 0; i--) { | |
System.out.println(i); | |
} |
for 之後的小括弧用兩個分號區隔三個項目,依序是控制變數的初值設定、迴圈結束條件、控制變數的調整。這個 for 迴圈與上面的 while 迴圈功能完全相同,寫成完整的範例程式,如下
001 | public class ForDemo { |
002 | public static void main(String[] args) { |
003 | System.out.println(); |
004 | for (int i = 10; i > 0; i--) { |
005 | System.out.println(i); |
006 | } |
007 | System.out.println(); |
008 | } |
009 | } |
010 | |
011 | /* 檔名: ForDemo.java |
012 | 作者: Kaiching Chang |
013 | 時間: September, 2014 */ |
編譯後執行,結果如下
小括弧中的兩個分號與條件是必須的,因此如果寫成
int i = 10; | |
for (; i > 0;) { | |
System.out.println(i); | |
} |
這會使 for 迴圈變成一個無窮迴圈。
習慣上, for 迴圈通常用於具有明確重複次數的迴圈,因為全部的控制機制都放在 for 之後的小括弧中, while 迴圈用於沒有明確重複次數的迴圈,例如接收使用者輸入的迴圈,程式通常被設計成一直等待使用者輸入,當使用者輸入結束指令時,迴圈才會結束。
但是提醒一點, for 迴圈可以用 while 迴圈替代,反之亦然,自己偏好哪一種也就可以用哪一種囉!
我們一路看了 SelectionDemo 、 SwitchDemo 、 WhileDemo 、 ForDemo 等等,這些都是類別 (class) , Java 中類別也就是檔案名稱,下面我們開始詳細討論類別的定義囉!
中英文術語對照
程式 | program |
迴圈 | loop |
區塊 | block |
while 迴圈 | while loop |
for 迴圈 | for loop |
控制變數 | control variable |
條件 | condition |
編譯 | compile |
無窮迴圈 | infinite loop |
封裝 | encapsulation |
類別 | class |
重點整理
- 迴圈用於重複性質的工作, while 迴圈利用控制變數決定何時結束迴圈, for 迴圈亦可用於具有多個元素的複合資料型態。
- 無窮迴圈是指沒有結束條件,一直執行的迴圈。
- 利用 break 陳述可提前跳出迴圈。
- 利用 continue 陳述可使迴圈直接進行下一輪。
問題與討論
- 很多情況都需要 while true 迴圈,這不是無窮迴圈嗎?那為什麼 還要 while true 迴圈呢?
- while 迴圈與 for 迴圈要如何互相替代?
- 遞迴是一種演算法,遞迴跟迴圈有什麼不同呢?
the end
沒有留言:
張貼留言