Difference between revisions of "ZH/Documentation/BASIC Guide/Loops"

From Apache OpenOffice Wiki
Jump to: navigation, search
Line 2: Line 2:
 
|ShowPrevNext=block
 
|ShowPrevNext=block
 
|ShowPrevPage=block
 
|ShowPrevPage=block
|PrevPage=Documentation/BASIC Guide/Branching
+
|PrevPage=ZH/Documentation/BASIC Guide/Branching
|NextPage=Documentation/BASIC Guide/Procedures and Functions
+
|NextPage=ZH/Documentation/BASIC Guide/Procedures and Functions
 
|lang=block
 
|lang=block
 
}}
 
}}
Line 156: Line 156:
  
 
{{PDL1}}
 
{{PDL1}}
 +
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Loops}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Loops}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Loops}}

Revision as of 22:07, 12 December 2008

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