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 的数字,各数字之间用一个空格隔开。每循环一次,外部循环都使循环计数器变量递减一次。