當你學習編程時,理解基本的構建塊是早期成功的關鍵。稍後您將學習困難的主題,但如果您不瞭解變量類型、循環和函數,則很難深入瞭解。
大多數新程序員不久就學會了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.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++;}然而,這是笨重的,沒有理由這樣做時,做,而循環存在。
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,這裡的輸出就不準確了。
總而言之:
當然,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循環,請在評論部分進行討論並告知我們!
圖片來源:Aaban viaShutterstock.com網站
...漸進的步驟。指令式程式設計語言包含if、else、while、for迴圈、類、物件和函式等結構。 圖02:指令式程式設計語言Java示例 十個數字的總和可以在Java中找到,如下所示。在每次迭代中,i值被新增到sum並分配給sum變數。在每次迭...
...在程式設計中,有時需要多次重複一個語句或一組語句。迴圈用於對同一組指令進行多次迭代。迴圈的一些例子是while迴圈、do while迴圈和for迴圈。在while迴圈中,首先計算測試表達式。如果為true,則執行while迴圈中的語句。最後...
關鍵區別–while與do while迴圈 在程式設計中,可能會有需要反覆執行語句塊的情況。大多數程式語言支援不同的控制結構,如for迴圈、while迴圈和do while迴圈來重複程式碼。迴圈允許多次執行一組語句,直到給定條件變為false。...
...浮點值。 在程式設計中,有重複一系列語句的情況。for迴圈和while迴圈用於迭代任務。用於決策,可使用if/else。如果邏輯為真,則If塊中的語句將執行。否則,將執行else塊中的語句。以下是一些常見於許多程式語言的關鍵字示...
對於(for)和while迴圈(while loop)的區別 程式是用程式語言編寫的執行某項任務的指令集。它可以是邏輯運算,也可以是數學運算。通常,程式中的語句一個接一個地執行。有時需要反覆執行一組語句。控制結構用於實現這一任務...
...(structured)和非結構化程式設計(unstructured programming)的區別 計算機程式是計算機執行用程式語言編寫的任務的一組指令。程式設計範例可以根據語言特性對程式語言進行分類。結構化程式設計和非結構化程式設計是兩種常見的程式...
學習程式設計的關鍵第一步是使用迴圈。謝天謝地,PowerShell將隨著您的技能不斷增長。 ...
... 迴圈是另一個重要的程式設計基礎。它們允許程式設計師指定一組條件,並在迴圈中連續執行程式碼,直到條件不再為真。例如,執行while迴圈,在內部至少執行一次程式...
... Photoshop建議使用儲存在計算機上的字型。單擊字型使其處於活動狀態,或單擊字型旁邊的星號將其標記為收藏夾以供以後使用。 ...