Visual Basic/循环
循环是控制结构,用于重复给定代码段一定次数,或者直到满足特定条件为止。
Visual Basic 有三种主要的循环类型:for..next 循环、do 循环和 while 循环。
注意:'Debug' 可能在 Visual Basic 中是保留字,这可能会导致此处显示的代码示例在某些版本的 Visual Basic 中失败。
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。然后程序正常执行 for 和 next 语句之间的任何代码。到达 next 语句后,程序返回 for 语句并按步长增加计数器的值。在这种情况下,X 在第二次迭代时将增加到 3,在第三次迭代时将增加到 5,等等。
要更改每次迭代计数器变量增加的量,只需更改步长的值。例如,如果你使用步长3,X 将从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 语句中,但如果这样做,编译器会检查它,因此这在编写正确的程序方面是一个小帮助。
另一种非常常见的情况是需要一个枚举列表中每个元素的循环。以下示例代码展示了如何做到这一点
Dim v As Variant
For Each v In list
Debug.Print v
Next
列表通常是集合或数组,但可以是任何其他实现枚举器的对象。请注意,迭代变量必须是Variant、Object 或与给定列表中元素类型匹配的类。
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
Do_Something
Loop
在 Visual Basic 中,你不能标记循环,但你当然可以在循环之前、循环内部或循环之后放置一个标签,如果你愿意。
此循环在开头有一个条件。语句将重复执行,只要条件满足。如果条件在最开始没有满足,那么循环内部的语句将永远不会被执行。
Do While X <= 5
X = X + 5
Loop
此循环在结尾有一个条件,语句将重复执行,直到条件满足。由于检查是在结尾进行的,因此语句至少会被执行一次。
Do
X = 5+2
Loop Until X > 5
有时你需要先进行计算,然后在满足某个标准时退出循环。但是,当标准不满足时,还需要做一些其他事情。因此你需要一个循环,其中退出条件位于中间。
Do
X = Calculate_Something
If X > 10 then
Exit Do
End If
Do_Something (X)
Loop
在 Visual Basic 中,你还可以使用多个退出语句。你不能使用 Exit Do 退出命名的外部循环,因为 Visual Basic 没有提供命名循环;你当然可以使用 Goto 代替它跳转到外部循环之后的标签。
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 循环两次,依此类推。
先前:分支 | 目录 | 接下来:字符串 |