while迴圈在計算機程式設計中是如何工作的

迴圈是您將在程式設計中學習的第一種控制型別之一。你可能知道while和for迴圈,但是while迴圈能完成什麼呢?...

當你學習編程時,理解基本的構建塊是早期成功的關鍵。稍後您將學習困難的主題,但如果您不瞭解變量類型、循環和函數,則很難深入瞭解。

do-while-loops-explained-featured

大多數新程序員不久就學會了if-else語句、while循環和for循環。但是您可能不瞭解的循環類型之一是do while循環。讓我們討論一下這個循環是如何工作的,當您想使用它時,我們來看幾個例子。

基礎知識

do while循環至少執行一次代碼塊,檢查條件是否為true,然後根據條件繼續在內部運行代碼。讓我們看一個簡單的偽代碼示例(因為它們可以幫助您學習!):

do { output "The variable x equals " + x; x++;} while (x < 5);output "The loop has ended.";

在這段代碼中,do括號內的行總是至少運行一次。這意味著x可以是循環開始時的任何值。

如果循環開始時x等於1,它將重複,直到x不滿足while旁邊的條件。因此,它將總共運行5次。當x不小於5時,循環結束並繼續到後面的代碼。此輸出如下所示:

The variable x equals 1 The variable x equals 2 The variable x equals 3 The variable x equals 4 The variable x equals 5 The loop has ended.

相反,如果這個循環開始時x等於20,它只運行一次。因此您將看到一個輸出語句,x遞增到21,循環將結束,因為21不小於5。其輸出為:

The variable x equals 20 The loop has ended.

與while和for循環對比

do while循環與其他循環有何不同?最重要的區別是do while循環在執行代碼塊之後測試條件,而其他循環在運行代碼塊之前檢查條件。

考慮以下基本偽代碼while循環進行比較:

x = 10;while (x < 5) { output "The loop has run!"; x++;}

這裡,x被設置為10,while循環在運行之前檢查x是否小於5。因此,裡面的代碼永遠不會運行。將相同的邏輯應用於do while循環會得到如下結果:

x = 10;do { output "The loop has run!"; x++;} while (x < 5)

此循環將輸出文本一次,增量x,然後繼續。

請注意,可以在while循環前面使用一個額外語句重新創建do while功能,如下所示:

output "Hello!";x++;while (x < 5) { output "Hello!"; x++;}

然而,這是笨重的,沒有理由這樣做時,做,而循環存在。

for循環

Do while循環與for循環有相似的區別。for循環定義一個變量,指定循環應該運行多長時間,併為每個迭代的結束設置一個行為。

下面是一個用於比較的簡單for循環:

for (int i = 0; i < 5; i++) { output "The loop has run " + i + " times.";}

這突出了do while和for循環之間的一個很好的對比——因為您在開始時設置了條件,所以您確切地知道for循環將運行多少次。如果將上述代碼修改為do while循環,如下所示:

do { output "The loop has run " + i + " times."; i++;} while (i < 5);

循環運行時可能會出現問題。如果您沒有在其他地方初始化i,那麼當do部分運行時,您不知道它的值是多少——而且它至少會運行一次。如果這個循環運行時我是500,這裡的輸出就不準確了。

總而言之:

  • 當您希望至少執行一次命令並持續執行直到條件為false時,do while循環非常有用。
  • while循環允許您在條件為true時重複代碼塊,並在條件不再為true時立即停止。
  • for循環允許您通過設置自己的參數來指定循環應該運行多少次。

留下do while循環

當然,do while循環和其他循環一樣,必須有一個退出條件。否則,您可能會得到一個無限循環。考慮以下代碼段:

x = 5;do { output "This never ends!";} while (x < 10);

如果您不在代碼中的任何地方增加x,那麼這個循環將永遠運行。現在,有時無限循環很有用,因為程序員設置代碼來從其他地方中斷循環。但是,新手程序員經常偶然遇到無限循環。

下面是一個合適的無限循環的例子。假設你在設計一個遊戲,用戶擲骰子,必須得到6才能離開基地。你想繼續擲骰子直到骰子落在6,顯然你必須至少擲一次骰子。因此,您可以使用以下代碼:

do { int roll = random(1, 2, 3, 4, 5, 6); if (roll == 6) break;} while (true);

while(true)條件意味著這個循環將永遠運行,這是我們想要的,因為用戶必須滾動直到得到6。如果沒有break語句,它就會卡住。但是一旦用戶滾動到6,if語句變為true,序列就會跳出循環並轉到後面的內容。

如果你不想,你不必使用break語句。事實上,如果可以的話,最好避免打斷語句。它們使您的代碼更難維護,並且以條件結尾更容易跟蹤。因此,下面修改的代碼實現了相同的目的:

do { int roll = random(1, 2, 3, 4, 5, 6);} while (roll != 6);

糟糕的無限循環

一個無限循環,你有一個退出的計劃是好的。但有時您會意外地創建一個無限循環,如下面的示例所示:

int x = 7;do { x = 1; x = x + 2; output "x equals " + x;} while (x < 10);

這可能看起來像是每個循環x增加2,並重復直到x不小於10,但仔細看。因為循環每次運行時都將x設置為1,所以這是一個無限循環。請注意,x=1和x=x+2意味著無論運行多少次,塊末尾的x始終是3,這意味著x永遠不小於10。

注意循環中的語句,這些語句在變量每次運行時都會無意中更改變量,以避免出現這種情況。

現實世界的例子

我們已經在上面討論了一些假設性的例子,但是讓我們快速看一下do while循環的一些有用的實際例子。

如果要創建一個循環,從文件中讀取數據,直到文件到達末尾,那麼可以使用do while循環。顯然,如果打算從文件中讀取數據,至少需要獲取一個字符,這樣就可以使用這樣的do while循環(感謝Stack Exchange用戶Steven Burnap的示例):

do { result = readData(buffer);} while (result != EOF);

如果沒有一段時間,你將不得不使用一個稍微醜陋的解決方案:

while (true) { result = readData(buffer); if (result == EOF) break;}

另一個例子是從用戶那裡獲取輸入。假設您正在編寫一個程序,要求用戶輸入一個正數。使用do-while,您可以確保他們的輸入是適當的:

do { output "Please enter a positive number:"; int input = getInput();} while (input < 0);

使用此循環,用戶將看到輸入數字的提示,並輸入一次值。如果他們輸入一個負數,循環將再次運行,並提示他們輸入一個正數,直到符合要求為止。其他循環對於這種類型的操作根本沒有意義。

準備好使用do while循環了嗎?

我們調查了do while循環,包括它們的基本原理,如何最好地使用它們,以及它們與其他循環的比較。如果您不記得本文中的其他內容,請知道do while循環適用於需要至少運行一次的情況,但在啟動循環之前不知道需要它的次數。

在你的程序中考慮這樣的情況,你會很容易找到適合do while循環的地方。幾乎所有最好的初學者語言都支持do while循環,因此實現它們應該不會有問題。

如果您正在學習基礎知識,請務必複習我們掌握新編程語言的主要技巧。

你還能想到什麼情況下做一段時間是有意義的?如果您在程序中使用do while循環,請在評論部分進行討論並告知我們!

圖片來源:Aaban viaShutterstock.com網站

  • 發表於 2021-03-14 11:34
  • 閱讀 ( 45 )
  • 分類:程式設計

你可能感興趣的文章

函式式程式設計(functional programming)和命令式程式設計(imperative programming)的區別

...漸進的步驟。指令式程式設計語言包含if、else、while、for迴圈、類、物件和函式等結構。 圖02:指令式程式設計語言Java示例 十個數字的總和可以在Java中找到,如下所示。在每次迭代中,i值被新增到sum並分配給sum變數。在每次迭...

  • 發佈於 2020-10-19 02:12
  • 閲讀 ( 50 )

打破(break)和在java中繼續(continue in java)的區別

...在程式設計中,有時需要多次重複一個語句或一組語句。迴圈用於對同一組指令進行多次迭代。迴圈的一些例子是while迴圈、do while迴圈和for迴圈。在while迴圈中,首先計算測試表達式。如果為true,則執行while迴圈中的語句。最後...

  • 發佈於 2020-10-19 05:44
  • 閲讀 ( 63 )

雖然(while)和執行while迴圈(do while loop)的區別

關鍵區別–while與do while迴圈 在程式設計中,可能會有需要反覆執行語句塊的情況。大多數程式語言支援不同的控制結構,如for迴圈、while迴圈和do while迴圈來重複程式碼。迴圈允許多次執行一組語句,直到給定條件變為false。...

  • 發佈於 2020-10-19 10:58
  • 閲讀 ( 68 )

識別符號(identifier)和關鍵字(keyword)的區別

...浮點值。 在程式設計中,有重複一系列語句的情況。for迴圈和while迴圈用於迭代任務。用於決策,可使用if/else。如果邏輯為真,則If塊中的語句將執行。否則,將執行else塊中的語句。以下是一些常見於許多程式語言的關鍵字示...

  • 發佈於 2020-10-19 15:19
  • 閲讀 ( 48 )

對於(for)和while迴圈(while loop)的區別

對於(for)和while迴圈(while loop)的區別 程式是用程式語言編寫的執行某項任務的指令集。它可以是邏輯運算,也可以是數學運算。通常,程式中的語句一個接一個地執行。有時需要反覆執行一組語句。控制結構用於實現這一任務...

  • 發佈於 2020-10-24 02:28
  • 閲讀 ( 48 )

結構化的(structured)和非結構化程式設計(unstructured programming)的區別

...(structured)和非結構化程式設計(unstructured programming)的區別 計算機程式是計算機執行用程式語言編寫的任務的一組指令。程式設計範例可以根據語言特性對程式語言進行分類。結構化程式設計和非結構化程式設計是兩種常見的程式...

  • 發佈於 2020-10-24 05:09
  • 閲讀 ( 75 )

powershell foreach、while和其他迴圈的工作原理

學習程式設計的關鍵第一步是使用迴圈。謝天謝地,PowerShell將隨著您的技能不斷增長。 ...

  • 發佈於 2021-03-11 23:17
  • 閲讀 ( 52 )

迄今為止程式設計師更有趣的10個原因

... 迴圈是另一個重要的程式設計基礎。它們允許程式設計師指定一組條件,並在迴圈中連續執行程式碼,直到條件不再為真。例如,執行while迴圈,在內部至少執行一次程式...

  • 發佈於 2021-03-12 19:23
  • 閲讀 ( 48 )

如何使用adobephotoshop識別字體

... Photoshop建議使用儲存在計算機上的字型。單擊字型使其處於活動狀態,或單擊字型旁邊的星號將其標記為收藏夾以供以後使用。 ...

  • 發佈於 2021-03-15 16:03
  • 閲讀 ( 40 )

想學程式設計嗎?你應該知道的5個關鍵術語

... 假設您在計算機1上建立了一個應用程式,並希望將其傳送給計算機2上的某個人。 ...

  • 發佈於 2021-03-23 09:19
  • 閲讀 ( 55 )