Do...Loop 陳述式 (Visual Basic)
更新:2007 年 11 月
當 Boolean 條件為 True 時重複陳述式區塊,或是重複陳述式區塊直到條件變成 True 為止。
Do { While | Until } condition [ statements ] [ Exit Do ] [ statements ] Loop -or- Do [ statements ] [ Exit Do ] [ statements ] Loop { While | Until } condition
參數
While
除非使用 Until,否則為必要項。重複迴圈直到 condition 為 False 為止。Until
除非使用 While,否則為必要項。重複迴圈直到 condition 為 True 為止。condition
選擇項。Boolean 運算式。如果 condition 為 Nothing,則 Visual Basic 會將它視為 False。statements
選擇項。當 condition 為 True 時,或直到 condition 為 True 之前,一或數個被重複的陳述式。Exit Do
選擇項。從 Do 迴圈當中傳出控制權。Loop
必要項。結束 Do 迴圈的定義。
備註
當您想不定次數重複一組陳述式時,請使用 Do...Loop 結構,直到滿足條件為止。如果您想重複陳述式特定數次時,For...Next 陳述式通常是較好的選擇。
Do...Loop 結構會提供給您比 While...End While 陳述式 (Visual Basic) 還多的彈性,因為它允許您在 condition 不是 True 時或當它先成為 True 時,選擇是否結束迴圈。它還允許您在迴圈開頭或結尾處測試 condition。
規則
條件的本質:條件通常來自於兩個值的比較,它也可以是任何評估為 Boolean 資料型別 (Visual Basic) 值 (True 或 False) 的運算式。其中包含其他資料型別的值,例如已轉換為 Boolean 的數字型別 (Numeric Type)。
測試條件:您只可以在迴圈的開頭或結尾處,測試 condition 一次。可以使用 While 或 Until 指定 condition,但不能同時使用兩者做指定。
反覆運算次數:如果您在迴圈開頭處測試 condition (在 Do 陳述式中),則迴圈可能不會執行。如果您在迴圈結尾處進行測試 (在 Loop 陳述式中),則迴圈一律至少會執行一次。
巢狀迴圈 您可以將一個迴圈置於另一個迴圈內,以便巢狀化 Do 迴圈。您可以將不同類型的控制結構以巢狀結構互置。如需詳細資訊,請參閱巢狀控制結構。
從迴圈當中傳出。Exit 陳述式 (Visual Basic) 會立即將控制權傳輸至接在 Loop 陳述式之後的陳述式。如果偵測到一個條件 (例如錯誤值或終止要求),而該條件會使迴圈不需要或不可能繼續重複執行,則您可能會想要結束迴圈。您可以將任何數目的 Exit Do 陳述式放在 Do 迴圈中的任何地方。Exit Do 通常會在評估某些條件之後使用,例如在 If...Then...Else 結構中。
無止盡迴圈
Exit Do 的其中一個用處是可以測試會造成「無止盡迴圈」的條件,無止盡迴圈就是會執行極多次,甚至無數次的迴圈。如果您偵測到這類狀況,可以使用 Exit Do 逸出此迴圈。否則,迴圈會繼續執行。
在下列範例中,指派給 number 的值可能會造成迴圈的執行次數超過 2 ^ 31 次。If 陳述式會檢查這個條件,如果該條件存在便會結束,以避免無止盡的迴圈。
Sub exitDoExample()
Dim counter As Integer = 0
Dim number As Integer = 8
Do Until number = 10
If number <= 0 Then Exit Do
number -= 1
counter += 1
Loop
MsgBox("The loop ran " & counter & " times.")
End Sub
注意事項: |
---|
若要停止無止盡的迴圈,請按下 ESC 鍵或同時按下 CTRL 鍵和 BREAK 鍵。 |
範例
下列範例會說明巢狀 Do...Loop 結構,以及 While 和 Until 的使用方式,並且在迴圈的開頭 (Do 陳述式) 和結尾 (Loop 陳述式) 處進行測試。
Sub DoExample()
Dim check As Boolean = True
Dim counter As Integer = 0
Do
Do While counter < 20
counter += 1
If counter = 10 Then
check = False
Exit Do
End If
Loop
Loop Until check = False
End Sub
在先前的範例中,內部的 Do...Loop 結構會執行迴圈 10 次,將旗標的值設定為 False,並且使用 Exit Do 陳述式提前結束。外迴圈在檢查過旗標值之後立即結束。