循环

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
doc OOo
Book.png


循环按照指定的次数执行某个代码块。也可以不定义循环的次数。

For...Next

For...Next 循环具有固定的次数。循环计数器定义了循环要执行的次数。在以下示例中,变量 I 是循环计数器,其初始值为 1。每次循环结束时,计数器递增 1。当变量 I 等于 10 时,循环停止。

Dim I 
For I = 1 To 10
  ' ...  Inner part of loop 
Next I

如果要在每次循环结束时使循环计数器以 1 以外的值递增,请使用 Step 函数:

Dim I 
For I = 1 To 10 Step 0.5
  ' ... Inner part of loop 
Next I

在上面的示例中,计数器在每次循环结束时递增 0.5,该循环执行了 19 次。

也可以使用负的步进值 (Step):

Dim I 
For I = 10 To 1 Step -1
  ' ... Inner part of loop 
Next I

在本示例中,计数器从 10 开始,每次循环结束时递减 1,直到计数器为 1。

使用 Exit For 指令,您可以提前退出 For 循环。在以下示例中,在第五次执行循环的过程中终止了循环:

Dim I 
For I = 1 To 10 
  If I = 5 Then 
    Exit For
  End If
  ' ... Inner part of loop 
Next I

For Each

Apache OpenOffice Basic 不支持 VBA 中的 For Each...Next 循环变体。与 For...Next 循环不同,For Each 循环不使用显式计数器。For Each 循环表示“对此集合中的所有内容执行此操作”,而不是“执行 n 次”。例如:

Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim a(d1, d2, d3)
For Each i In a()
    ' ... Inner part of loop 
Next i

Do...Loop

Do...Loop 并非与一个固定次数相关联。相反,Do...Loop 一直执行到满足某个特定条件时为止。Do...Loop 有四种变体。在前两个示例中,可能根本不会执行循环中的代码(“执行 0 次”逻辑)。在后面的示例中,将至少执行一次代码。在以下示例中,A > 10 表示任意条件:

  1. Do While...Loop 变体
    Do While A > 10
       ' ... loop body
    Loop
    
    每次执行循环之前,检查 While 后面的条件是否为 true,只有满足条件时才会执行循环。
  2. Do Until...Loop 变体
    Do Until A > 10
      ' ... loop body
    Loop
    
    只要 Until 后面的条件的值为 false,就会执行循环。
  3. Do...Loop While 变体
    Do
      ' ... loop body
    Loop While A > 10
    
    在第一次执行循环后才会检查条件;如果 While 后面的条件的值为 false,就终止循环。
  4. Do...Loop Until 变体
    Do
      ' ... loop body
    Loop Until A > 10
    
    也是在第一次执行循环后检查条件,但如果 Until 后面的条件的值为 true,就会终止循环。

For...Next 循环一样,Do...Loop 也提供了一个终止命令。Exit Do 命令可以在循环中的任意位置退出循环。

Do 
  If A = 4 Then
    Exit Do
  End If
  ' ... loop body
Loop While A > 10

编程示例:使用嵌入循环进行排序

使用循环的方法有很多种,例如,搜索列表、返回值或执行复杂的数学任务。以下示例是一种算法,它使用两个循环按名称对列表进行排序。

Sub Sort
  Dim Entry(1 To 10) As String
  Dim Count As Integer
  Dim Count2 As Integer
  Dim Temp As String

  Entry(1) = "Patty"
  Entry(2) = "Kurt"
  Entry(3) = "Thomas"
  Entry(4) = "Michael"
  Entry(5) = "David"
  Entry(6) = "Cathy"
  Entry(7) = "Susie"
  Entry(8) = "Edward"
  Entry(9) = "Christine"
  Entry(10) = "Jerry"

  For Count = 1 To 9
    For Count2 = Count + 1 To 10
      If Entry(Count) > Entry(Count2) Then
        Temp = Entry(Count)
        Entry(Count) = Entry(Count2)
        Entry(Count2) = Temp
      End If
    Next Count2
  Next Count

  For Count = 1 To 10
    Print Entry(Count)
  Next Count

End Sub

这些值被成对交换若干次,直到最后按升序进行排序。像气泡一样,变量逐渐移到正确位置。因此,此算法也称为冒泡排序

Content on this page is licensed under the Public Documentation License (PDL).


Personal tools