Java 入門指南 V2.00 - 單元 7 - 迴圈




程式 (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) 看看結果吧!


001public 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 迴圈功能完全相同,寫成完整的範例程式,如下


001public 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 迴圈替代,反之亦然,自己偏好哪一種也就可以用哪一種囉!


我們一路看了 SelectionDemoSwitchDemoWhileDemoForDemo 等等,這些都是類別 (class) , Java 中類別也就是檔案名稱,下面我們開始詳細討論類別的定義囉!


中英文術語對照


程式program
迴圈loop
區塊block
while 迴圈while loop
for 迴圈for loop
控制變數control variable
條件condition
編譯compile
無窮迴圈infinite loop
封裝encapsulation
類別class

重點整理


  1. 迴圈用於重複性質的工作, while 迴圈利用控制變數決定何時結束迴圈, for 迴圈亦可用於具有多個元素的複合資料型態。
  2. 無窮迴圈是指沒有結束條件,一直執行的迴圈。
  3. 利用 break 陳述可提前跳出迴圈。
  4. 利用 continue 陳述可使迴圈直接進行下一輪。

問題與討論


  1. 很多情況都需要 while true 迴圈,這不是無窮迴圈嗎?那為什麼 還要 while true 迴圈呢?
  2. while 迴圈與 for 迴圈要如何互相替代?
  3. 遞迴是一種演算法,遞迴跟迴圈有什麼不同呢?

the end

沒有留言: