For...Next 语句 (Visual Basic)

更新:2007 年 11 月

将一组语句重复执行指定的次数。

For counter [ As datatype ] = start To end [ Step step ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

各部分说明

  • counter
    For 语句的必选项。数值变量。它是循环的控制变量。

  • datatype
    如果尚未声明 counter,则是必选项。counter 的数据类型。

  • start
    必选。数值表达式。counter 的初始值。

  • end
    必选。数值表达式。counter 的最终值。

  • step
    可选。数值表达式。每次循环后 counter 的增量。

  • statements
    可选。放在 For 和 Next 之间的一条或多条语句,它们将运行指定的次数。

  • Exit For
    可选。将控制转移到 For 循环外。

  • Next
    必选。结束 For 循环的定义。

备注

当需要将一组语句重复执行设置好的次数时,请使用 For...Next 结构。

当事先不知道需要执行多少次循环中的语句时,While...End While 语句 (Visual Basic)Do...Loop 语句 (Visual Basic) 循环可很好地发挥作用。但是,如果您希望让循环运行特定次数,则 For...Next 是较好的选择。您需要在第一次输入循环时确定迭代次数。

step 的值可以是正数或负数。它将按以下方式决定循环处理过程:

Step 值

循环执行的条件

正数或零

counter <= end

负数

counter >= end

如果没有指定,则 step 的默认值为 1。

规则

  • **数据类型。**counter 的数据类型通常是 Integer,但也可以是任何支持大于或等于 (>=)、小于或等于 (<=)、加法 (+) 和减法 (-) 运算符的类型。只要支持所有这些运算符,该数据类型甚至可以是用户定义的类型。

    start、end 和 step 表达式通常计算为 Integer 类型,但也可以计算为任何拓宽到 counter 的类型的数据类型。如果要将用户定义的类型用于 counter,这意味着您可能必须定义 CType 转换运算符,来将 start、end 或 step 的类型转换为 counter 的类型。

  • **声明。**如果未在此循环外声明 counter,则必须在 For 语句内声明它。这种情况下,counter 的范围就是循环的主体。但是,不能既在循环外声明 counter,又在循环内声明 counter。

  • **迭代次数。**Visual Basic 仅在循环开始之前计算一次迭代值 start、end 和 step。如果语句块更改 end 或 step,这些更改不影响循环的迭代。

  • **嵌套循环。**可以将一个循环放在另一个循环内以嵌套 For 循环。不过,每个循环必须具有唯一的 counter 变量。下面的结构是有效的。

    For i As Integer = 1 To 10
        For j As Integer = 1 To 10
            For k As Integer = 1 To 10
                ' Insert statements to operate with current values of i, j, and k.
            Next k
        Next j
    Next i
    

    还可以在一种控制结构中嵌套其他种类的控制结构。有关更多信息,请参见嵌套的控制结构

    说明:

    如果先遇到外部嵌套级别的 Next 语句,后遇到内部嵌套级别的 Next 语句,编译器将发出错误信号。不过,仅当在所有 Next 语句中都指定了 counter 时,编译器才能检测到这种重叠错误。

  • **标识控制变量。**可以选择在 Next 语句中指定 counter。这将提高程序的可读性,尤其是在具有嵌套的 For 循环的情况下。必须指定与相应的 For 语句中出现的变量相同的变量。

  • 将控制转移到循环外。Exit 语句 (Visual Basic) 将控制立即转移到 Next 语句后面的语句。如果检测到使继续迭代不必要或不可能的条件(如错误值或终止请求),则可能需要退出循环。而且,如果在 Try...Catch...Finally 中捕获异常,则可以在 Finally 块的结尾使用 Exit For。

    可以在 For 循环中的任何位置插入任意数量的 Exit For 语句。Exit For 通常在计算特定条件后使用,例如在 If...Then...Else 结构中。

  • **无限循环。**Exit For 的一种用途是测试可能导致“无限循环”(即运行次数非常多甚至无限的循环)的条件。如果检测到这样的条件,就可以使用 Exit For 退出循环。有关更多信息,请参见 Do...Loop 语句 (Visual Basic)

行为

  • **进入循环。**当开始执行 For...Next 循环时,Visual Basic 将计算start、end 和 step(仅此一次)。然后将 start 赋予 counter。运行语句块之前,它先将 counter 与 end 进行比较。如果 counter 已经超过了结束值,则 For 循环终止,并且控制将传递给 Next 语句后面的语句。否则,将运行语句块。

  • **循环的迭代。**每次 Visual Basic 遇到 Next 语句时,都按 step 递增 counter,然后返回到 For 语句。它再次将 counter 与 end 进行比较,并再次根据结果运行块或者终止循环。这一过程将一直持续下去,直到 counter 传递 end 或者遇到 Exit For 语句为止。

  • **循环的终止。**在 counter 传递 end 之后,循环才会终止。如果 counter 等于 end,则循环继续。如果 step 为正数,确定是否运行循环代码块的比较运算将为 counter <= end;如果 step 为负数,则为 counter >= end。

  • **更改迭代值。**如果在循环内更改 counter 的值,将会使代码的阅读和调试变得更加困难。更改 start、end 或 step 的值不会影响首次进入循环时所确定的迭代值。

示例

下面的示例演示了不同 Step 值情况下的 For...Next 嵌套结构。

Dim words, digit As Integer
Dim thisString As String = ""
For words = 10 To 1 Step -1
    For digit = 0 To 9
        thisString &= CStr(digit)
    Next digit
    thisString &= " "
Next words

前面的示例创建了一个字符串,该字符串包含 10 个从 0 到 9 的数字,各数字之间用一个空格隔开。每循环一次,外部循环都使循环计数器变量递减一次。

请参见

任务

如何:提高循环的性能

概念

循环结构

嵌套的控制结构

参考

While...End While 语句 (Visual Basic)

Do...Loop 语句 (Visual Basic)

Exit 语句 (Visual Basic)

For Each...Next 语句 (Visual Basic)