VB.Net如何评估FOR ... NEXT循环的结束测试?

时间:2015-05-20 19:58:02

标签: vb.net for-loop

我正在向学生讲授VB.Net中的FOR NEXT循环,很久以前,我似乎对学习汇编语言有了深刻的理解。试着计算一行代码在几种情况下会做的迭代次数:

FOR x = 1 TO 1  (implied STEP 1)  
  (body)  
NEXT x  

应该做1个循环,对吗?但我把测试读作“直到x为1”,所以在第一次循环后,x变为2,测试不起作用。
怎么样:FOR x = 1 TO 1 STEP -1?你的答案是一样的吗? 怎么样:FOR x = 1 TO 0 (implied STEP 1)?身体永远不应该执行。但测试是“直到x = 0”,因此当x从0爬升时它应该导致无限循环...开始看问题?
怎么样:FOR x = 1 TO 0 STEP -1?现在它会做两次身体,对吗?但那时x是什么? -1。当测试超出所说的停止时,测试是如何停止的? 我猜编译器实际上正在测试until x = (endval) + stepval。我可以在Assembler中想象出来,但除此之外,我承认我无法看到或向我的学生解释这一切是如何实现的,就像假设“应该”一样。 (对于像“1”这样的常量,这个问题似乎微不足道,但想象一下变量或其他创建FOR循环参数的方法。)任何人都可以解决一些问题吗?谢谢。

1 个答案:

答案 0 :(得分:3)

Tony Hinkle似乎提供了答案,但作为评论这样做了。所以我提供他在这里提到的特定文本作为答案:

“当For ... Next循环启动时,Visual Basic会计算开始,结束和步骤.Visual Basic仅在此时评估这些值,然后将start指定为计数器。在语句块运行之前,Visual Basic会比较计数器如果counter已经大于结束值(或者如果step为负数则更小),For循环结束并且控制传递给Next语句后面的语句。否则,语句块运行。

每次Visual Basic遇到Next语句时,它都会逐步递增并返回For语句。它再次将计数器与结果进行比较,并再次运行块或退出循环,具体取决于结果。此过程将继续,直到计数器通过结束或遇到Exit For语句。

在计数器结束之前,循环不会停止。如果counter等于end,则循环继续。确定是否运行块的比较是计数器< = end如果step为正,则counter> = end如果step为负。“

帮助澄清:

FOR x = 1 TO 1(隐含的步骤1)将循环1次。

FOR x = 1 TO 1 STEP -1将循环1次。

FOR x = 1 TO 0(暗示STEP 1)永远不会循环,因为计数器已经过了结束。

FOR x = 1到0 STEP -1将循环两次