跳转到内容

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 循环两次,依此类推。

先前:分支 目录 接下来:字符串
华夏公益教科书