我正在向学生讲授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循环参数的方法。)任何人都可以解决一些问题吗?谢谢。
答案 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将循环两次