为什么计数器大于结束 - FOR语句VB

时间:2017-02-03 08:51:07

标签: vb.net for-loop

当程序完成FOR状态时,计数器大于结束编号。我知道,最后(在下一个之后)计数器具有相同的值然后结束值(对于计数器= 1到结束)。有人可以解释一下。

Dim all_lines = 5
Dim line As Integer

Label1.Text = ""
For line = 1 To all_lines
     Label1.Text += line & "/" & all_lines & Chr(13)
Next

Label1.Text += line & "/" & all_lines & Chr(13)

结果:

1/5
2/5
3/5
4/5
5/5
6/5

2 个答案:

答案 0 :(得分:1)

循环计数器基本上在Next语句处递增,然后根据For语句的限制进行测试。如果它不大于上限,则进入循环,否则退出。它以这种方式发生,因为您可以指定大于1的Step,并且循环不希望提前计算当前循环计数器值加上Step值是否超过上限。它只是等到循环计数器实际包含该值并然后测试它。

重要的是要意识到For循环实际上只是语法糖,而编译的代码基本上是Do循环。如果您将代码编写为Do循环,那么循环计数器超出上限的原因就更明显了:

Dim all_lines = 5
Dim line As Integer

Label1.Text = ""
line = 1

Do While line <= all_lines
    Label1.Text += line & "/" & all_lines & Chr(13)
    line += 1
Loop

Label1.Text += line & "/" & all_lines & Chr(13)

在绝大多数情况下,你真的不应该在循环外使用循环计数器。这意味着你不应该在循环之外声明它,即这样做:

For i As Integer = 0 To upperBound

而不是:

Dim i As Integer

For i = 0 To upperBound

在任何情况下,你实际上需要在循环外使用循环计数器,这是因为循环正在进行搜索,因此你应该在循环中有一个Exit For语句来阻止循环计数器进一步增加。

答案 1 :(得分:0)

它是循环外的最后一行:

Label1.Text += line & "/" & all_lines & Chr(13)

删除它。

代码应该是:

Dim all_lines = 5
Dim line As Integer

Label1.Text = ""
For line = 1 To all_lines
     Label1.Text += line & "/" & all_lines & Chr(13)
Next

拥有额外的一行会导致您的问题。 &#34;线&#34;将等于6以便退出循环,并且你正在对它进行操作 - 在循环之外:

Label1.Text + = line&amp; &#34; /&#34; &安培; all_lines&amp; CHR(13)

是的,您将获得您正在体验的结果。只需删除最后一行代码。