練習 - 建立 do-while 反覆運算迴圈
- 10 分鐘
表面上,do-while 和 while 陳述式不過是「另一個」反覆項目陳述式,可讓您逐一查看程式碼區塊,並變更您程式碼的執行流程。 不過,一旦檢查每個工作的方式,我們可以更清楚地識別每個反覆專案語句的細微差別,以及何時使用它們。
什麼是 do-while 陳述式?
當指定的布爾表達式 do-while 被評估為 true 時,該語句會執行一條語句或多條語句的區塊。 因為該表達式會在每次執行循環之後進行評估,因此 do-while 循環會執行一或多次。
do
{
// This code executes at least one time
} while (true);
執行流程會從大括號內開始。 程序代碼至少會執行一次,然後評估關鍵詞旁邊的 while 布爾表達式。 如果布爾表達式傳 true回 ,程式代碼區塊會再次執行。
藉由將布爾表達式硬式編碼為 true,我們已建立無限迴圈-一個永遠不會結束的迴圈,至少不會像目前撰寫的那樣結束。 我們需要一種方法來中斷程式代碼區塊內的迴圈。 稍後我們將討論do-while的結束準則。
好吧,現在讓我們準備撰寫程式代碼環境,並開始檢查實 do-while 作 語句的程式代碼範例。
準備您的撰寫程式碼環境
本課程模組包含實際操作活動,可引導您完成建置及執行示範程式碼的程序。 建議您使用 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# 主控台專案,在本課程模組期間建立、建置及執行程式碼範例。
關閉 [終端] 面板。
撰寫 do-while 語句,以在產生特定隨機數時中斷
讓我們撰寫程式代碼,在產生數位 7 之前,會持續產生介於 1 到 10 之間的隨機數。 可能只需要一次迭代就能得到7,或可能需要數十次迭代。
請確定您已開啟 Visual Studio Code,並在 [編輯器] 面板中顯示 Program.cs。
備註
Program.cs 應該是空的。 如果不是,請選取並刪除所有程式碼。
在 Visual Studio Code 編輯器中輸入下列程式碼。
Random random = new Random(); int current = 0; do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7);在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。
在建置或執行程式碼之前,必須先儲存 Program.cs 檔案。
在 [瀏覽器] 面板中,若要在 TestProject 資料夾位置開啟 [終端機],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。
終端面板將開啟。 終端應包含命令提示字元,顯示已對 TestProject 資料夾位置開啟終端。
在終端命令提示字元中,若要執行程式碼,請輸入 dotnet run,然後按 Enter 鍵。
備註
如果您看到訊息指出「找不到要執行的專案」,請確定終端命令提示字元會顯示預期的 TestProject 資料夾位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>檢閱您的輸出。
由於產生的數位是隨機的,因此您的結果會有所不同。 不過,值
7將會是最後列印的數字,因為布爾表達式在產生 7 時會評估為false,執行流程將終止程式碼區塊。2 5 8 2 7請花幾分鐘檢閱您的程式碼。
第一個任務的一個重要學習點是,
do-while迴圈的程式碼區塊至少會執行一次。 它可能會執行大量次數的迭代,而且我們就不太可能事先知道會有多少次迭代。也請務必注意,程式代碼區塊內的程式碼會影響是否繼續逐一查看程式代碼區塊。 影響結束準則的程式代碼區塊是選取
do-while或while語句,而不是另一個反覆專案語句的主要原因。foreach和for都依賴程式代碼區塊外部的因素,以判斷程式代碼區塊反覆專案的數目。
撰寫 while 語句,只在隨機數大於某些值時反覆運算
現在讓我們看看 while 語句。
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
Random random = new Random(); int current = random.Next(1, 11); /* do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7); */ while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}");備註
在此情況下,我們會將
while關鍵詞和布爾表達式放在程式代碼區塊之前。 這會改變程式代碼的意義,並充當「閘門」,僅在布林運算式評估為真時,才允許執行流繼續。儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。檢閱列出的輸出值。
由於數位是隨機的,因此您的程式代碼會產生不同的序列。
9 7 5 Last number: 1請花幾分鐘檢閱您的程式碼。
在頂端程式代碼中,我們使用
random來初始化int名為的current變數。 接下來的程式代碼行是我們的while語句。我們的
while語句會根據布爾表達式(current >= 3)來反覆運算。 我們不知道會將哪個值指派給current,但有一些可能性會影響我們的while迴圈。- 如果
current初始化為大於或等於3的值,則布爾表達式會傳回true,而執行流程會進入程式碼區塊。 在程式代碼區塊內,我們做的第一件事就是將的值current寫入控制台。 接下來,仍在程式代碼區塊內,我們將使用新的隨機值來更新current的值。 此時,控制權會回到評估布林運算式的while陳述式頂端。 此過程會繼續,直到布爾表達式的計算結果為false,並且執行流程脫離此代碼區塊。 - 如果
current初始化 (在我們的程式代碼頂端) 的值小於3,則布爾表達式會傳回false,而且程式代碼區塊永遠不會執行。
最後一個程式代碼行會將的值
current寫入主控台。 此程式碼將會執行,不論迭代代碼區塊是否已執行,且這是我們將current的最終值輸出到主控台的機會。- 如果
使用 continue 陳述式來直接進入布林運算式
在某些情況下,我們想要在程式區塊中將程式碼的其餘部分短路,並繼續進行下一次迭代。 我們可以使用 continue 陳述句來達到此目的。
使用 Visual Studio Code 編輯器來更新程式代碼,如下所示:
Random random = new Random(); int current = random.Next(1, 11); do { current = random.Next(1, 11); if (current >= 8) continue; Console.WriteLine(current); } while (current != 7); /* while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}"); */請花幾分鐘檢閱您的程式碼。
請注意,我們已切換回
do-while。do-while可確保迴圈至少會逐一查看一次。我們在程式代碼區塊內執行的第一件事是將新的隨機值指派給
current。 接下來,我們會檢查是否current大於或等於8。 如果這個運算式傳回true,則continue關鍵字會將控制權轉送至程式碼區塊的結尾,而while將會評估(current != 7)。 因此,只要current的值不等於7,迴圈就會繼續重複執行。此練習步驟的關鍵在於包含
continue關鍵字的程式碼行:if (current >= 8) continue;由於將的值
current寫入主控台的程式代碼位於 之後if (current >= 8) continue;,因此我們的程式代碼可確保current的值大於或等於8永遠不會寫入輸出視窗。讓我們試試看。
儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。檢閱列出的輸出值。
5 1 6 7您可能會看到與下面顯示的結果不同。 不過,在程式代碼執行結束之前,您將不會在輸出視窗中看到任何
8值或更大的7值。請考慮
continue和break語句之間的差異。如您在最後一個步驟中所見,
continue語句會將執行轉移到當前迭代的結尾。 此行為與我們在break語句中所看到的行為不同。break語句會終止反覆專案 (或switch),並將控制權傳送至終止語句之後的語句。 如果終止語句之後沒有語句,則控制權將轉移到檔案或方法的結尾。
回顧
您應該從此單元中記住一些重要想法:
-
do-while陳述式會逐一查看程式碼區塊至少一次,並可能會根據布林運算式繼續逐一查看。 布爾表達式的評估通常取決於程式碼區塊內部所產生或取得的一些值。 -
while陳述式會先評估布林運算式,並在布林運算式評估為true時繼續逐一查看程式碼區塊。 -
continue關鍵字會立即進入布林運算式。