CodeGym /課程 /JAVA 25 SELF /while 迴圈:入門與使用細節

while 迴圈:入門與使用細節

JAVA 25 SELF
等級 4 , 課堂 1
開放

1. 導言

在程式設計中,經常需要把同樣的動作重複執行很多次。例如:

  • 走訪列表中的所有元素。
  • 從鍵盤讀取數值,直到使用者輸入所需的內容為止.
  • 計算 1 到 100 的總和。
  • 不斷請求使用者輸入密碼,直到正確為止。

如果嘗試不用迴圈來實現這些事情,程式會又長又無聊且無法擴充。想像你寫一個計算機程式,決定手動把 1 加到 10:

int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
// ... 像這樣重複 10 次。唉。
不使用迴圈的手動重複——很不方便!

你大概還沒寫完就先打呵欠了!解法——迴圈。它們能讓你用簡潔且清楚的方式描述重複的動作。今天我們要認識最基礎、但非常好用的迴圈——while

2. 認識 while 迴圈

語法與基本結構

while 迴圈就像程式世界裡的「鸚鵡」:只要條件成立,它就會一遍又一遍地重複同一段程式碼。當條件不再為真,鸚鵡就會安靜下來(迴圈結束)。

語法:

while (condition)
{
    // 迴圈主體
}
帶有區塊的 while 迴圈寫法

流程圖

這是一張簡單的流程圖,幫助理解 while 迴圈的工作方式:

uml-while

3. 範例:while 迴圈實戰

經典計數器

我們寫一個從 1 數到 5 並輸出數字的簡單程式:

int i = 1;
while (i <= 5)
{
    System.out.println("步驟第 " + i);
    i++; // 別忘了遞增計數器!
}
// 將輸出:
// 步驟第 1
// 步驟第 2
// 步驟第 3
// 步驟第 4
// 步驟第 5

請注意:如果忘記遞增變數 i,迴圈將永遠不會結束(我們的鸚鵡會變成不死身,不停地重複)。這叫做 無限迴圈——挺嚇人的東西。

從鍵盤輸入直到達到目標值

常見地會用迴圈來「逼」使用者給出正確答案:

String password = "";
while (!password.equals("qwerty"))
{
    System.out.print("請輸入密碼:");
    password = console.nextLine();
}
System.out.println("歡迎!");

這裡程式會要求輸入密碼,直到你輸入魔法字串 "qwerty"。別忘了:如果刪掉這行 password = console.nextLine();,迴圈又會變成無限迴圈(會一直詢問密碼,但不讀取輸入——會永遠卡住,像壞掉的機器人)。

4. while 迴圈的種類與使用場景

一般的 while 迴圈

如上所示,這種迴圈會在第一次迭代之前先檢查條件。若條件一開始就是假——迴圈主體一次也不會執行。

範例:條件一開始就不成立

int i = 10;
while (i < 5)
{
    System.out.println(i); // 不會被執行!
}

這很合理,就如同上面所寫的那樣。

巢狀的 while 迴圈

有時需要在迴圈裡再放一個迴圈。例如,遍歷所有行,並在每一行中檢查所有字元。就目前階段來說有點冒險,不過先用簡單方式示範:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        System.out.println("i = " + i + ", j = " + j);
        j++;
    }
    i++;
}

// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2

巢狀迴圈我們會在再過幾堂課更詳細地討論,這裡先小小嚇你一下 :)

無限迴圈

有的迴圈會結束,而有的——可以永無止境。

while (true)
{
    System.out.println("我永遠存在!");
}

較少使用,通常用於某些背景處理(例如伺服器運作),但在實務上也確實會用到。

5. 如何避免犯傻:使用 while 的常見錯誤

在程式設計中,迴圈就像電力:很棒,但必須懂得安全規則。

問題 1:不小心造成無限迴圈

新手很常忘了更新用來判斷條件的變數。結果迴圈就會「無限」執行,只能強制停止程式(例如按下 Ctrl + C)。

int i = 1;
while (i <= 5)
{
    System.out.println(i);
    // i++;  // 糟了!忘了遞增 i
}

問題 2:條件寫錯

有時候開發者會自掘墳墓:條件根本不可能為真。結果迴圈完全不會執行。

int i = 10;
while (i < 5)
{
    System.out.println(i); // 這段程式碼永遠不會被執行。
    i++;
}

問題 3:資料型別錯誤

在迴圈條件中一定要是布林運算式——也就是運算結果必須是 truefalse

int number = 5;
while (number) // 錯誤!需要的是 boolean,不是 int。
{
    number--;
}
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION