跳轉到內容

Visual Basic/迴圈

來自華夏公益教科書,開放的書籍,開放的世界

迴圈是控制結構,用於重複給定程式碼段一定次數,或者直到滿足特定條件為止。

Visual Basic 有三種主要的迴圈型別:for..next 迴圈、do 迴圈和 while 迴圈。

注意:'Debug' 可能在 Visual Basic 中是保留字,這可能會導致此處顯示的程式碼示例在某些版本的 Visual Basic 中失敗。

For..Next 迴圈

[編輯 | 編輯原始碼]

For..Next 迴圈的語法有三個組成部分:計數器範圍步長。一個基本的 for..next 迴圈如下所示

For X = 1 To 100 Step 2
 Debug.Print X
Next X

在這個例子中,X 是計數器,“1 to 100”是範圍,“2”是步長。

Next 部分語句中的變數引用是可選的,通常做法是省略它。如果程式碼縮排正確,則這樣做不會產生歧義。

當初始化 For..Next 迴圈時,計數器被設定為範圍中的第一個數字;在這種情況下,X 被設定為 1。然後程式正常執行 fornext 語句之間的任何程式碼。到達 next 語句後,程式返回 for 語句並按步長增加計數器的值。在這種情況下,X 在第二次迭代時將增加到 3,在第三次迭代時將增加到 5,等等。

要更改每次迭代計數器變數增加的量,只需更改步長的值。例如,如果你使用步長3X 將從1 增加到4,然後增加到7, 10, 13,等等。當步長沒有明確說明時,預設情況下使用1。(請注意,步長可以是負值。例如,for X = 100 to 1 step -1將使 X 的值從 100 減少到 99 再到 98,等等。)

當 X 達到範圍中的範圍末尾(上面的示例中為 100)時,迴圈將停止執行,程式將繼續執行 next 語句之後的程式碼。

可以在 for..next 迴圈中編輯計數器變數的值,儘管這通常被認為是不好的程式設計習慣

For X = 1 To 100 Step 1
 Debug.Print X
 X = 7
Next

雖然你可能在極少數情況下會發現編輯計數器的正當理由,但上面的例子說明了一個潛在的陷阱

因為 X 在每次迭代結束時被設定為 7,所以這段程式碼建立了一個無限迴圈。為避免這種情況和其他意外行為,在編輯計數器變數時要格外小心!

編譯器不要求你指定迴圈變數的名稱在 Next 語句中,但如果這樣做,編譯器會檢查它,因此這在編寫正確的程式方面是一個小幫助。

列表上的 For 迴圈

[編輯 | 編輯原始碼]

另一種非常常見的情況是需要一個列舉列表中每個元素的迴圈。以下示例程式碼展示瞭如何做到這一點

Dim v As Variant

For Each v In list
 Debug.Print v
Next

列表通常是集合或陣列,但可以是任何其他實現列舉器的物件。請注意,迭代變數必須是VariantObject 或與給定列表中元素型別匹配的類。

Do 迴圈

[編輯 | 編輯原始碼]

Do 迴圈比 For 迴圈更靈活,但通常應該只在必要時使用。Do 迴圈以以下格式出現

  • Do while
  • Do until
  • Loop while
  • Loop until

While 迴圈(do while 和 loop while)將繼續執行,只要某個條件為真。另一方面,Until 迴圈將迴圈,只要某個條件為假。在 Do 部分或 Loop 部分放置 While 或 Until 的唯一區別在於,Do 在迴圈開始時檢查,而 Loop 在迴圈結束時檢查。一個基本迴圈的示例如下

Do
 Debug.Print "hello"
 x = x + 1
Loop Until x = 10

此迴圈將列印 hello 多次,具體取決於 x 的初始值。你可能已經注意到,Do 迴圈沒有內建的計數器。但是,它們可以像上面顯示的那樣手動建立。在這種情況下,我選擇了 x 作為我的計數器變數,並且每次迴圈執行時,x 都將自身增加一。當 X 達到 10 時,迴圈將停止執行。Do 迴圈的優點是,無論何時滿足某個特定條件,你都可以隨時退出。你可以讓它迴圈,只要某個變數為假,或者為真,或者只要某個變數保持在某個範圍內。

無限迴圈:Do..Loop

[編輯 | 編輯原始碼]

無限迴圈是一個永遠不會結束的迴圈,迴圈內部的語句將無限次重複。這裡“永遠”是一個相對術語——如果計算機被關閉,那麼即使是無限迴圈也會非常突然地結束。

Do
 Do_Something
Loop

在 Visual Basic 中,你不能標記迴圈,但你當然可以在迴圈之前、迴圈內部或迴圈之後放置一個標籤,如果你願意。

開頭帶條件的迴圈:Do While..Loop

[編輯 | 編輯原始碼]

此迴圈在開頭有一個條件。語句將重複執行,只要條件滿足。如果條件在最開始沒有滿足,那麼迴圈內部的語句將永遠不會被執行。

Do While X <= 5
 X = X + 5 
Loop

結尾帶條件的迴圈:Do..Loop Until

[編輯 | 編輯原始碼]

此迴圈在結尾有一個條件,語句將重複執行,直到條件滿足。由於檢查是在結尾進行的,因此語句至少會被執行一次。

Do
 X = 5+2
Loop Until X > 5

中間帶條件的迴圈:Do..Exit Do..Loop

[編輯 | 編輯原始碼]

有時你需要先進行計算,然後在滿足某個標準時退出迴圈。但是,當標準不滿足時,還需要做一些其他事情。因此你需要一個迴圈,其中退出條件位於中間。

Do
 X = Calculate_Something
 If X > 10 then
  Exit Do  
 End If
 Do_Something (X)
Loop

在 Visual Basic 中,你還可以使用多個退出語句。你不能使用 Exit Do 退出命名的外部迴圈,因為 Visual Basic 沒有提供命名迴圈;你當然可以使用 Goto 代替它跳轉到外部迴圈之後的標籤。

While 迴圈

[編輯 | 編輯原始碼]

While 迴圈類似於 Do 迴圈,只是測試條件始終出現在迴圈的頂部。如果在第一次進入迴圈塊時條件為假,則迴圈的內容將永遠不會被執行。條件在每次迴圈迭代之前都會被重新測試。

一個 While 迴圈的示例如下

    price = 2
    
    While price < 64
        Debug.Print "Price = " & price
        price = price ^ 2
    Wend
    
    Debug.Print "Price = " & price & ":  Too much for the market to bear!"

While 迴圈將執行,直到條件測試為假——或者直到遇到“Exit While”語句。

巢狀迴圈

[編輯 | 編輯原始碼]

巢狀迴圈是指任何位於已存在迴圈內的迴圈型別。它們可以包含任何型別的迴圈。為此,我們將使用 For 迴圈。重要的是要記住,內部迴圈將執行其正常次數,乘以外部迴圈執行的次數。例如

For i = 1 To 10
 For j = 1 To 2
  Debug.Print "hi"
 Next
Next

這將列印單詞“hi” 20 次。在 i 迴圈的第一次傳遞中,它將執行 j 迴圈兩次。然後在 i 迴圈的第二次傳遞中,它將再次執行 j 迴圈兩次,依此類推。

先前:分支 目錄 接下來:字串
華夏公益教科書