Difference between revisions of "ZH/Documentation/BASIC Guide/Loops"
Line 156: | Line 156: | ||
{{PDL1}} | {{PDL1}} | ||
− | + | ||
+ | |||
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Loops}} | {{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Loops}} |
Latest revision as of 22:28, 16 December 2008
循环按照指定的次数执行某个代码块。也可以不定义循环的次数。
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 表示任意条件:
- Do While...Loop 变体
每次执行循环之前,检查 While 后面的条件是否为 true,只有满足条件时才会执行循环。
Do While A > 10 ' ... loop body Loop
- Do Until...Loop 变体
只要 Until 后面的条件的值为 false,就会执行循环。
Do Until A > 10 ' ... loop body Loop
- Do...Loop While 变体
在第一次执行循环后才会检查条件;如果 While 后面的条件的值为 false,就终止循环。
Do ' ... loop body Loop While A > 10
- Do...Loop Until 变体
也是在第一次执行循环后检查条件,但如果 Until 后面的条件的值为 true,就会终止循环。
Do ' ... loop body Loop Until A > 10
与 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). |