練習 - 建立和設定反覆運算迴圈
- 14 分鐘
在表面上,for 語句是另一個反覆語句,允許您反覆執行程式代碼區塊,從而改變程式碼的執行流程。 不過,一旦檢查每個工作的方式,我們可以更清楚地識別每個反覆專案語句的細微差別,以及何時使用它們。
什麼是 for 語句?
for語句會重複執行程式區塊特定次數。 此層級的控制讓 for 語句在其他反覆專案語句中是唯一的。 foreach 陳述式會針對一連串資料 (如陣列或集合) 中的每個項目,逐一查看程式碼區塊一次。 while語句會逐一查看程式代碼區塊,直到符合條件為止。
此外,for 語句藉由揭示迭代的條件,使您能更好地控制迭代的流程。
在此練習中,您將使用 for 陳述式,瞭解如何控制迴圈的前置條件、完成條件、迴圈模式等。 此外,您將瞭解 語句的 for 常見使用案例。
好吧,現在讓我們準備撰寫程式代碼環境,並開始檢查實 for 作 語句的程式代碼範例。
準備您的撰寫程式碼環境
本課程模組包含實際操作活動,可引導您完成建置及執行示範程式碼的程序。 建議您使用 Visual Studio Code 作為開發環境來完成這些活動。 針對這些活動使用 Visual Studio Code,可協助您更熟悉在全球專業人員使用的開發人員環境中撰寫及執行程式碼。
開啟 Visual Studio Code。
您可以使用 Windows [開始] 功能表 (或另一個作業系統的對等資源) 來開啟 Visual Studio Code。
在 Visual Studio Code 的 [檔案] 功能表上,選取 [開啟資料夾]。
在 [開啟資料夾] 對話方塊中,瀏覽至 Windows Desktop 資料夾。
如果您在不同的資料夾位置中保留程式碼專案,您可以改用該資料夾位置。 對於這次訓練,重要的是要有一個容易找到並記住的地點。
在 [開啟資料夾] 對話方塊中,選取 [選取資料夾]。
如果您看到詢問您是否信任作者的安全性對話方塊,請選取 [是]。
在 Visual Studio Code 的 [終端] 功能表上,選取 [新增終端]。
請注意,終端面板中的命令提示字元會顯示目前資料夾的資料夾路徑。 例如:
C:\Users\someuser\Desktop>備註
如果您是在自己的電腦上工作,而不是在沙箱或託管環境中工作,且您已完成此 C# 系列中的其他 Microsoft Learn 課程模組,您可能已針對程式碼範例建立專案資料夾。 如果是這種情況,您可以略過下一個步驟,這個步驟會用來在 TestProject 資料夾中建立主控台應用程式。
在終端機命令提示字元中,若要在指定的資料夾中建立新的控制台應用程式,請輸入下列提示:
dotnet new console -o ./CsharpProjects/TestProject這個 .NET CLI 命令會使用 .NET 程式範本,在指定的資料夾位置中建立新的 C# 主控台應用程式專案。 這個命令會為您建立 CsharpProjects 和 TestProject 資料夾,並使用 TestProject 做為
.csproj檔案的名稱。如果顯示訊息,告知您檔案已經存在,請繼續進行後續步驟。 您將重複使用現有的項目檔。
在EXPLORER檢視中,展開 CsharpProjects 資料夾。
您應該會看到 TestProject 資料夾和兩個檔案、名為 Program.cs 的 C# 程式檔,以及名為 TestProject.csproj 的 C# 項目檔。
在 Visual Studio Code 的 [檔案] 功能表上,選取 [開啟資料夾]。
在 [ 開啟資料夾] 對話框中,選取 CsharpProjects 資料夾,然後選取 [ 選取資料夾]。
在 EXPLORER 檢視中,展開 [TestProject] 資料夾,然後選取 [Program.cs]。
刪除現有的程式碼。
您將使用此 C# 主控台專案,在本課程模組期間建立、建置及執行程式碼範例。
關閉 [終端] 面板。
編寫基本的 for 語句
請確定您已開啟 Visual Studio Code,並在 [編輯器] 面板中顯示 Program.cs。
備註
Program.cs 應該是空的。 如果不是,請選取並刪除所有程式碼。
在 Visual Studio Code 編輯器中輸入下列程式碼。
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }此程式碼包含一個簡單的
for語句,迴圈運行程式碼區塊10次,並列印目前的i值。在 [Visual Studio Code 檔案] 功能表上,選取 [儲存]。
在建置或執行程式碼之前,必須先儲存 Program.cs 檔案。
在 [Explorer] 面板中,若要在 TestProject 資料夾位置開啟終端機,請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中打開]。
終端視窗將開啟。 終端應包含命令提示字元,顯示已對 TestProject 資料夾位置開啟終端。
在終端命令提示字元中,若要執行程式碼,請輸入 dotnet run,然後按 Enter 鍵。
備註
如果您看到訊息指出「找不到要執行的專案」,請確定終端機命令提示字元會顯示預期的 TestProject 資料夾位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>您應該會看見下列輸出。
0 1 2 3 4 5 6 7 8 9花一分鐘來識別 語句的
for六個部分。語句
for包含下列六個部分:for關鍵字。- 用於定義
for迭代條件的一組括號。 這些括號包含三個不同的部分,並以陳述式運算子的結尾 (分號) 分隔。 - 第一個部分會定義並初始化反覆運算器變數。 在此範例中為:
int i = 0。 本節稱為 初始化表達式。 - 第二個部分會定義完成條件。 在此範例中為:
i < 10。 換句話說,執行時會在語句下方的for代碼區塊中,繼續迭代代碼,直到i小於10。 當i變成等於10時,運行時間會停止執行for語句的程式區塊。 檔將本節稱為 條件。 - 第三個部分會定義每個反覆項目之後要採取的動作。 在此情況下,在每次反覆運算之後,
i++會將i的值遞增 1。 文件將本節稱為 迭代器。 - 最後是程式碼區塊。 程式代碼區塊包含將針對每個反覆專案執行的程序代碼。 請注意,值
i被引用在程式代碼區塊內。 文件將本節稱為 本文。
根據我們的變數命名規則,您可能會想知道
i是否為保存目前反覆迴圈的變數的有效名稱。 在此情況下,i大多數人會視為有效。 其他熱門選擇是x和counter。 當您有使用j的外部for陳述式,且需要為內部i陳述式建立反覆運算變數時,也會在這些情況下使用名稱for。備註
這三個區段(初始化表達式、條件和反覆運算器)都是選擇性的。 不過,實際上,通常會使用這三個區段。
變更迭代條件
如我們一開始所述, for 語句在反覆專案語句中具有兩個獨特的品質。
for語句應在您事先知道需要迭代執行程式碼區塊的次數時使用。for語句可讓您控制處理每個反覆專案的方式。
如果我們需要對程式碼區塊進行迭代,但想要從大到小倒數而不是從小到大計數,該怎麼辦?
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }花一分鐘的時間檢閱更新的程序代碼。
藉由變更 語句的
for三個部分,我們會變更其行為。- 我們會將反覆運算變數初始化為 10。
- 當
for小於i時,我們會變更完成條件以結束0語句。 - 我們將改變迭代器的模式,以便在每次完成迭代時從
1中減去i。
儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。請注意,輸出已變更。
當您執行程式代碼時,您會看到下列輸出。
10 9 8 7 6 5 4 3 2 1 0
嘗試迭代器的模式
如果我們想要略過反覆運算器變數中的特定值,該怎麼辦?
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }花一分鐘的時間檢閱更新的程序代碼。
我們不會遞增或遞減迭代變數的值,而是使用
1在每個迭代之後略過兩個值。儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。請注意輸出如何變更。
當您執行程式代碼時,您會看到下列輸出。
0 3 6 9無可否認地,您不會經常進行這類動作,但希望您可以在需要時,知道您對反覆運算有更精細的控制層級。
使用 break 關鍵詞來中斷反覆項目語句
如果我們需要根據某些條件提早退出迭代語句,該怎麼辦? 我們可以使用 break 關鍵詞。
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }請花一分鐘的時間檢閱您更新的代碼中使用的
break關鍵詞。我們會先在「使用 C# 中的 switch-case 建構建立程式碼流程分支」課程模組中看到
break陳述式。 事實上,我們也可以使用break關鍵詞來結束迴圈語句。儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。請注意輸出如何變更。
當您執行程式代碼時,您會看到下列輸出。
0 1 2 3 4 5 6 7
遍歷陣列的每個元素
語句 for 的常見用法是遍歷元素陣列,特別是在您需要一些控制迭代過程時。 當 foreach 在逐一查看陣列的每個元素時,可以調整 for 陳述式以提供更多的自定義功能。
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }花一分鐘的時間檢閱更新的程序代碼。
首先,請注意,我們已具現化名為
names且包含四個名稱的字串陣列。接下來,請注意,我們使用
Array.Length屬性來取得數位中的元素數目,而我們使用此值來初始化反覆運算器變數 (int i = names.Length - 1)。 我們從值減去 1,因為陣列元素的索引編號是以零起始的(四個元素的索引編號是 0-3)。最後,請注意,我們已選擇從後向前遍歷陣列,這是
foreach語句無法做到的事。 我們會使用程式代碼區塊內的反覆運算變數值來指定數位元素的索引編號 (names[i])。儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。請注意,陣列元素會以反向順序列出(如我們預期所示)。
當您執行程式代碼時,您會看到下列輸出。
Michael David Eddie Alex備註
我們可以藉由建構
for語句來依次遍歷陣列元素,如下所示:for (int i = 0; i < names.Length; i++)。
檢查 foreach 陳述式的限制
如果您想要在 foreach 反覆運算期間更新陣列中的某個值,該怎麼辦?
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。請注意顯示的錯誤訊息。
如果您嘗試編譯並執行此程序代碼,您會看到例外狀況。
Cannot assign to name because it is a 'foreach iteration variable'換句話說,您無法重新指派
name的值,因為它是foreach迭代內部實作的一部分。
使用 for 語句克服 foreach 語句的限制
讓我們嘗試使用 for 語句來修改反覆運算程式代碼區塊內數位列的內容。
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) if (names[i] == "David") names[i] = "Sammy"; foreach (var name in names) Console.WriteLine(name);花一分鐘的時間檢閱更新的程序代碼。
請注意,我們已從只包含單行程式代碼的程式代碼區塊中移除大括弧。 此修訂會使用我們在 C# 中使用程式代碼區塊控制變數範圍和邏輯課程模組中所討論的相同技術。 許多開發人員發現此樣式難以閱讀,而其他人則偏好此縮寫樣式,因為它可協助他們更簡潔且更具表現力。 如果您發現此程式碼難以閱讀,或只是不想使用此樣式,請放心,大括弧一律可用於您的程式代碼區塊。 如有需要,請使用下列程式代碼更新編輯器面板中的程式代碼:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) { if (names[i] == "David") { names[i] = "Sammy"; } } foreach (var name in names) { Console.WriteLine(name); }儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。請注意,程式代碼在沒有錯誤的情況下執行,並產生所需的輸出。
當您執行程式代碼時,您會看到下列輸出。
Alex Eddie Sammy Michael由於陣列不是迴圈語句實作的一部分,因此您可以更改陣列中的值。
回顧
以下是本單元的一些重點:
- 迭代
for語句可讓您反覆執行程式代碼區塊的特定次數。 - 反覆運算
for語句可讓您藉由改變括弧內的三個條件,來控制反覆項目機制的每個層面:初始化表達式、條件和反覆運算器。 - 當您需要控制想要如何逐一查看陣列中的每個項目時,通常會使用
for陳述式。 - 如果您的程式代碼區塊只有一行程式代碼,您可以視需要排除大括弧和空格符。