Do-Loop迴圈

Do-Loop為最基本結構的迴圈,用途廣泛,可任意取代WhileFor。是個結構明確,易懂易改的迴圈敘述。

凡是迴圈都是由「繞行迴圈」及「脫離迴圈或繼續執行的條件式」兩種敘述所組成的,以While-Wend為例:

While 條件式 ‘←脫離迴圈或繼續執行的條件式敘述

敘述區塊

Wend ‘←回到開頭While的繞行迴圈敘述

以For-Next為例:

For 計次變數 = 起始值 To 終止值 (Step 步進值) ‘←脫離迴圈或繼續執行的條件式敘述,判斷計次變數是否介於起始值和終止值之間

敘述區塊

Next (計次變數) ‘←回到開頭For的繞行迴圈敘述

繞行迴圈敘述的功用其實就類似GoTo,可以跳到迴圈的前頭。而脫離迴圈或繼續執行的條件式如果為True或False,則會繼續迴圈或是結束迴圈。了解這些迴圈結構後,我們來看看Do-Loop的基本結構吧!

最陽春的Do-Loop迴圈,事實上不包含「脫離迴圈或繼續執行的條件式」,結構如下:

Do

敘述區塊

Loop ‘←繞行迴圈敘述,回到開頭Do的位置

沒有脫離迴圈或繼續執行的條件式,那不就無法結束迴圈的嗎?是的,如此一來,Do-Loop迴圈確實成了永遠無法終止的無窮迴圈。因此,為了讓Do-Loop能夠結束迴圈,須加上While或是Until兩種敘述來當作脫離迴圈或繼續執行的條件判斷式。而其中While表示「只要…,就…」,也就是While後的判斷式成立,為True,便繼續執行Do-Loop迴圈;Until則表示「做…,直到…」,也就是Until後的判斷式成立,為True,便立刻跳出Do-Loop迴圈。While和Until放置的位置,與執行結果也會有很大的關係,千萬不能搞錯。

While

格式一:

Do While 條件式

敘述區塊

Loop

這種格式會在執行Do迴圈時,判斷While條件式是否為True,若為True,則繼續執行Do-Loop迴圈的敘述區塊;反之,則立刻跳出。

格式二:

Do

敘述區塊

Loop While 條件式

這種格式會在執行Do迴圈時,判斷While條件式是否為True,若為True,則回到Do開頭的地方繼續執行Do-Loop迴圈的敘述區塊;反之,則立刻跳出。

以上Do-While-Loop和Do-Loop-While究竟差在哪?Do-While-Loop是先判斷再執行迴圈;Do-Loop-While是先執行迴圈再判斷,所以可以確定迴圈至少執行過一次。是比較下面程式碼的差異:

Do-While-Loop

1
2
3
4
5
6
7
8
Private Sub Do_While_Loop()
    Dim X As Integer
    X = 0
    Do While X < 0
        X = X + 1
    Loop
    Print X
End Sub

Do-Loop-While

1
2
3
4
5
6
7
8
Private Sub Do_Loop_While()
    Dim X As Integer
    X = 0
    Do
        X = X + 1
    Loop While X < 0
    Print X
End Sub

你猜?上面程式碼Do迴圈執行完後,X的值會為多少,會一樣嗎?結果證明,前者結果為0,後者結果為1。While X<0,一開始X便為0,迴圈敘述區塊為X = X + 1,所以這個條件絕對永遠不會成立,但後者為Do-Loop-While結構,一定是先X = X + 1後,也就是X=1時,再去判斷While條件式,才跳出迴圈,所以執行結果為X=1。

同樣的道理,我們來看看Until。

Until

格式一:

Do Until 條件式

敘述區塊

Loop

這種格式會在執行Do迴圈時,判斷Until條件式是否為True,若為True,則立刻終止執行Do-Loop迴圈的敘述區塊,並跳出迴圈;反之,則繼續執行。

格式二:

Do

敘述區塊

Loop Until 條件式

這種格式會在執行Do迴圈時,判斷Until條件式是否為True,若為True,則立刻終止執行Do-Loop迴圈的敘述區塊,並跳出迴圈;反之,則會到Do開頭並繼續執行敘述區塊。

以上Do-Until-Loop和Do-Loop-Until差在:後者至少執行過敘述區塊一次。相信你已經很清楚了,我們直接來比較以下程式碼的差異。

Do-Until-Loop

1
2
3
4
5
6
7
8
Private Sub Do_Until_Loop()
    Dim X As Integer
    X = 0
    Do Until X >= 0
        X = X + 1
    Loop
    Print X
End Sub

Do-Loop-Until

1
2
3
4
5
6
7
8
Private Sub Do_Loop_Until()
    Dim X As Integer
    X = 0
    Do
        X = X + 1
    Loop Until X >= 0
    Print X
End Sub

以上程式碼,前者結果為0,後者結果為1,你比較出來了嗎?

Exit Do

再來說說Exit Do,Exit Do放在Do-Loop迴圈內,可以無須經過While或Until的判斷就脫離迴圈。如果你的脫離Do-Loop迴圈要加點額外的條件的話,就要使用If和Exit Do了。舉個例子吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Example()
    Dim X As Integer, Y As Integer, K As Integer
    X = 0
    Y = 1
    K = 5 'K為X的加數,Y的乘數。K不能等於0或-1。
    Do
        X = X + K
        Y = K * Y
        If Y > X And Y > 10 Then
            MsgBox "Y比X先大於10了!"
            Exit Do
        End If
    Loop Until X > 10
End Sub

以上例子,迴圈執行結果會隨著K值不同,而有X、Y變數大小不同的情況。Do-Loop迴圈用途廣泛,熟練之後對於以後的程式生涯一定會事半功倍!

文章分類:VB6.0|標籤:,

迴響已關閉