CodeGym /課程 /C# SELF /while 迴圈:認識與使用細節

while 迴圈:認識與使用細節

C# SELF
等級 4 , 課堂 1
開放

1. 前言

寫程式的時候,常常要重複做一樣的事情好幾次。舉例來說:

  • 遍歷 list 裡的所有元素。
  • 從鍵盤讀取數值,直到使用者輸入正確的東西。
  • 計算從 1 到 100 的所有數字的總和。
  • 一直要求使用者輸入密碼,直到他輸對為止。

如果你不用迴圈來寫這些東西,程式會又臭又長又無聊,還很難維護。想像一下,你寫一個計算機程式,然後決定手動把 1 到 10 的數字加起來:

int sum = 0;
sum += 1;
sum += 2;
sum += 3;
// ... 這樣寫 10 次。嗯,真的很無聊。
沒用迴圈的手動重複 — 超麻煩!

你大概還沒寫完就睡著了吧!解決方法就是 迴圈。它們可以讓你很簡潔又清楚地描述重複的動作。今天我們要來認識最基本但超級實用的迴圈 — while

2. 認識 while 迴圈

語法和基本結構

while 迴圈就像程式世界裡的「鸚鵡」:只要條件成立,它就會一直重複同一段程式碼。只要條件不成立,鸚鵡就會閉嘴(迴圈結束)。


while (條件)
{
    // 迴圈主體
}
while 迴圈的寫法,帶有指令區塊

流程圖

這裡有一個簡單的流程圖,幫你理解 while 迴圈怎麼跑:

3. 範例:while 迴圈實戰

經典計數器

來寫個簡單的程式,從 1 數到 5 並印出每個數字:

int i = 1;
while (i <= 5)
{
    Console.WriteLine($"步驟 № {i}");
    i++; // 記得要讓計數器加一!
}
// 會印出:
// 步驟 № 1
// 步驟 № 2
// 步驟 № 3
// 步驟 № 4
// 步驟 № 5

注意:如果你忘記讓 i 增加,這個迴圈就永遠不會結束(你的鸚鵡會變成不死鳥,一直重複下去)。這種情況叫做 無限迴圈 — 超恐怖的東西。

一直輸入直到正確為止

有時候會用迴圈來「逼」使用者輸入正確的答案:

string password = "";
while (password != "qwerty")
{
    Console.Write("請輸入密碼: ");
    password = Console.ReadLine();
}
Console.WriteLine("歡迎進來!");

這裡程式會一直要你輸入密碼,直到你打出神奇的 "qwerty"。記得:如果你把 password = Console.ReadLine(); 這行刪掉,這個迴圈又會變成無限迴圈(會一直問密碼但永遠不讀輸入 — 卡死像壞掉的機器人一樣)。

4. while 迴圈的類型和使用場景

一般的 while 迴圈

這種迴圈就像上面那樣,在 第一次 執行前就會先檢查條件。如果條件一開始就不成立,主體一次都不會執行。

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

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // 這裡永遠不會執行!
}

這很合理啦,跟程式寫的意思一樣。

巢狀 while 迴圈

有時候你會需要在一個迴圈裡面再放一個迴圈。比如說,遍歷每一行,然後檢查每一個字元。現在這樣寫有點太進階,不過還是給你一個簡單的例子:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        Console.WriteLine($"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

巢狀迴圈我們之後幾堂課會再細講,這裡只是先讓你感受一下 XD

無限迴圈

有些迴圈會結束,有些則會永遠跑下去。

while (true)
{
    Console.WriteLine("我是不死鳥!");
}

這種寫法很少見,通常是用在背景處理(像 server 在跑),但有時候還是會用到。

5. 怎麼避免寫出蠢 code:while 常見錯誤

寫程式的時候,迴圈就像電一樣:很酷,但要懂得安全守則。

問題 1:不小心寫出無限迴圈

新手最常犯的錯,就是忘記更新條件用的變數。結果就是迴圈「無限」執行,只能強制關掉程式(比如按 Ctrl + C)。

int i = 1;
while (i <= 5)
{
    Console.WriteLine(i);
    // i++;  // 哎呀!忘記讓 i 增加
}

問題 2:條件寫錯

有時候自己挖坑給自己跳:條件根本永遠不會成立。結果就是迴圈一次都不會執行。

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // 這段 code 永遠不會跑。
    i++;
}

問題 3:資料型態搞錯

while 迴圈的條件一定要是布林值 — 也就是結果要是 true 或 false。

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