C# if 陳述式與迴圈 - 條件式邏輯教學課程

此教學課程將教您如何撰寫 C# 程式碼來檢查變數,並根據那些變數來變更執行路徑。 您將會撰寫 C# 程式碼,並查看程式碼編譯和執行的結果。 此教學課程包含一系列探索 C# 中分支和迴圈建構的課程。 這些課程會教導您 C# 語言的基本概念。

提示

若要在焦點模式中貼上程式碼片段,您應該使用鍵盤快速鍵 (Ctrl + vcmd + v)。

必要條件

此教學課程預期您已設定機器以進行本機開發。 如需安裝指示和 .NET 中應用程式開發的概觀,請參閱 設定本機環境

如果您想要在不需要設定本機環境的情況下執行程式碼,請參閱此教學課程的互動式瀏覽器版本

使用 if 陳述式來做決策

建立名為 branches-tutorial 的目錄。 將其設為目前的目錄,然後執行下列命令:

dotnet new console -n BranchesAndLoops -o .

重要

.NET 6 的 C# 範本會使用 最上層語句。 如果您已經升級至 .NET 6,您的應用程式可能不符合本文中的程式碼。 如需詳細資訊,請參閱新 C# 範本產生最上等級陳述式一文

.NET 6 SDK 也會為使用下列 SDK 的專案新增一組隱含global using 指示詞:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

這些隱含 global using 指示詞包含該專案型別最常見的命名空間。

如需詳細資訊,請參閱隱含 using 指示詞的文章

此命令會在目前目錄中建立新的 .NET 主控台應用程式。 在您偏好使用的編輯器中開啟 Program.cs,並以下列程式碼取代內容:

int a = 5;
int b = 6;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10.");

在主控台視窗中鍵入 dotnet run 來嘗試此程式碼。 您應該會看到主控台顯示 "The answer is greater than 10." 訊息。 修改 b 的宣告,讓總和小於 10:

int b = 3;

再次輸入 dotnet run。 因為答案小於 10,所以不會印出任何東西。 您正在測試的條件為 False。 您尚未有可執行的程式碼,因為您在 if 陳述式中僅撰寫了一個可能的分支:True 分支。

提示

在您探索 C# (或任何程式設計語言) 時,可能會在撰寫程式碼時犯錯。 編譯器會找出並回報錯誤。 仔細查看錯誤輸出,以及產生該錯誤的程式碼。 編譯器錯誤通常可以協助找出問題。

此第一個範例示範 if 和布林值類型的功能。 布林值是一個變數,可能具有下列兩種值的其中之一:truefalse。 C# 會針對布林值變數定義特殊類型:boolif 陳述式會檢查 bool 的值。 當值為 true 時,就會執行 if 之後的陳述式。 否則,會加以跳過。 這個流程可以檢查條件,並根據條件來執行陳述式,因此很實用。

搭配使用 if 和 else

若要在 True 和 False 分支中執行不同的程式碼,則必須建立可在條件為 False 時執行的 else 分支。 請嘗試 else 分支。 新增下列程式碼的最後兩行 (您應該已經有前面四行):

int a = 5;
int b = 3;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10");
else
    Console.WriteLine("The answer is not greater than 10");

只有當測試的條件為 false 時,才會執行 else 關鍵字之後的陳述式。 將 ifelse 結合布林值條件,就可提供處理 truefalse 條件的所有功能。

重要

ifelse 陳述式之下的縮排是為了方便人類閱讀。 C# 語言不會將縮排或空白字元視為有意義的內容。 ifelse 關鍵字之後的陳述式將會根據條件來執行。 此教學課程中的所有範例都遵循常見的實務,根據陳述式的控制流程縮排程式碼行。

因為縮排沒有意義,所以當您在依條件執行的區塊中使用超過一個陳述式時,需要使用 {} 來表示。 C# 程式設計人員通常會在所有的 ifelse 子句上使用這些大括號。 下列範例與您建立的內容相同。 修改程式碼,使它符合下列程式碼:

int a = 5;
int b = 3;
if (a + b > 10)
{
    Console.WriteLine("The answer is greater than 10");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
}

提示

本教學課程的其餘部分,程式碼範例都會遵循常見的做法,在程式碼中包含大括號。

您可以測試更複雜的條件。 在您目前已撰寫的程式碼後方新增下列程式碼:

int c = 4;
if ((a + b + c > 10) && (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("And the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("Or the first number is not equal to the second");
}

適用於相等== 符號測試。 使用 == 可區分指派中相等的測試,您在 a = 5 中看過該指派。

&& 代表「且」。 這表示兩個條件都必須為 True,才會執行 True 分支中的陳述式。 這些範例也示範在每個條件式分支中可以有多個陳述式,前提是必須將陳述式放在 {} 之中。 您也可以使用 || 來代表「或」。 在您目前已撰寫的程式碼後方新增下列程式碼:

if ((a + b + c > 10) || (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("Or the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("And the first number is not equal to the second");
}

修改 abc 的值,並在 &&|| 之間切換以進行探索。 您將更加了解 &&|| 運算子的工作原理。

您已完成第一個步驟。 在開始下一節之前,讓我們將目前的程式碼移到另一個個別的方法。 這可讓您更輕鬆地開始處理新的範例。 將現有的程式碼放在名為 ExploreIf() 的方法中。 從程式頂端加以呼叫。 當您完成這些變更時,您的程式碼看起來應該像這樣:

ExploreIf();

void ExploreIf()
{
    int a = 5;
    int b = 3;
    if (a + b > 10)
    {
        Console.WriteLine("The answer is greater than 10");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
    }

    int c = 4;
    if ((a + b + c > 10) && (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("And the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("Or the first number is not greater than the second");
    }

    if ((a + b + c > 10) || (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("Or the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("And the first number is not greater than the second");
    }
}

將針對 ExploreIf() 的呼叫註解化。 這會在您處理本節的內容時,使輸出變得較為整齊:

//ExploreIf();

// 會在 C# 中起始一段註解。 註解是您想保留在原始程式碼中,但不想要作為程式碼執行的任何文字。 編譯器不會從註解產生任何可執行的程式碼。

使用迴圈重複執行作業

在此節中,您會使用迴圈來重複陳述式。 在對 ExploreIf 的呼叫之後新增此程式碼:

int counter = 0;
while (counter < 10)
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
}

while 陳述式會檢查條件,並執行 while 之後的陳述式或陳述式區塊。 其會重複檢查條件、執行那些陳述式,直到條件為 false 為止。

在此範例中有一個新的運算子。 counter 變數之後的 ++遞增運算子。 它會將 1 加到 counter 上,並將該值儲存在 counter 變數中。

重要

請確定 while 迴圈條件會在您執行程式碼時會切換至 False。 否則,您建立的無限迴圈程式永遠不會結束。 我們不會在此範例中示範此狀況,因為您將必須使用 CTRL-C或其他方法來將程式強制結束。

while 迴圈會先測試條件,然後才執行 while 之後的程式碼。 do ... while 迴圈會先執行程式碼,然後才檢查條件。 下列程式碼範例顯示 do while 迴圈:

int counter = 0;
do
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
} while (counter < 10);

do 迴圈和稍早的 while 迴圈都會產生相同的輸出。

使用 for 迴圈

for 迴圈經常用於 C#。 請嘗試此程式碼:

for (int index = 0; index < 10; index++)
{
    Console.WriteLine($"Hello World! The index is {index}");
}

前面的程式碼與您先前使用的 while 迴圈和 do 迴圈功能相同。 for 陳述式有三個部分來控制其運作方式。

第一個部分是 for 初始設定式int index = 0; 宣告 index 是迴圈變數,然後將它的初始值設為 0

中間的部分是 for 條件index < 10 宣告此 for 迴圈只要 counter (計數器) 的值小於 10,就會繼續執行。

最後一個部分是 for 迭代器index++ 會指定在執行 for 陳述式之後的區塊後,如何修改迴圈變數。 在這裡,它指定 index 應該在每次執行區塊之後遞增 1。

自行實驗。 請嘗試下列各種變化:

  • 變更初始設定式,以不同的值開始。
  • 變更條件,以不同的值停止。

當您完成後,我們會繼續使用您學到的內容來撰寫一些程式碼。

此教學課程未涵蓋另一種迴圈陳述式:foreach 陳述式。 foreach 陳述式會針對項目序列中的每個項目重複其陳述式。 其最常與「集合」搭配使用,這將在下一個教學課程中說明。

建立巢狀迴圈

whiledofor 迴圈可以巢狀於另一個迴圈之內,以利用外部迴圈中每個項目與內部迴圈中每個項目的組合來建立矩陣。 讓我們這麼做,以建立一組英數字元組來表示資料列與資料行。

一個 for 迴圈可以產生資料列:

for (int row = 1; row < 11; row++)
{
    Console.WriteLine($"The row is {row}");
}

另一個迴圈可以產生資料行:

for (char column = 'a'; column < 'k'; column++)
{
    Console.WriteLine($"The column is {column}");
}

您可以讓一個迴圈成為另一個迴圈內的巢狀迴圈,以形成配對:

for (int row = 1; row < 11; row++)
{
    for (char column = 'a'; column < 'k'; column++)
    {
        Console.WriteLine($"The cell is ({row}, {column})");
    }
}

您可以看到每次內部迴圈完整執行,外部迴圈便會遞增一次。 反轉資料列和資料行巢狀結構,並自行查看變化。 當您完成時,請將此節中的程式碼放在名為 ExploreLoops() 的方法中。

結合分支和迴圈

您已經了解 C# 語言中的 if 陳述式和迴圈建構,接著看看您是否能夠撰寫 C# 程式碼,以找出從整數 1 至 20 能夠被 3 整除之數字的總和。 下列提供幾個提示:

  • % 運算子可提供除法運算的餘數。
  • if 陳述式可提供條件,以判斷數字是否應為總和的一部分。
  • for 迴圈可協助您將 1 到 20 的所有數字重複一系列的步驟。

請自己試試看。 然後檢查成果。 您獲得的答案應該是 63。 您可以在 GitHub 上檢視完整的程式碼 \(英文\) 來查看其中一個可能的答案。

您已經完成<分支和迴圈>教學課程。

您可以在自己的開發環境中,繼續完成陣列和集合教學課程中的內容。

您可以在下列文章深入了解這些概念: