嵌套while循环 - 外部与内部条件
在下面的例子中,内部while循环在外部循环条件变为false后继续执行它的语句2吗?或者一旦外部while循环条件变为假,即使内部while循环的条件为真,ENTIRE循环退出(包括内部while循环)?嵌套while循环 - 外部与内部条件
while (becomes false){
statements 1;
statements 1;
while (true at the time the outer loop condition become false){
statements 2;
statements 2;
}
}
println("print something interesting");
它可能有助于了解while循环的工作原理。如果你写:
while(myCondition) {
doSomething();
doSomethingElse();
}
println("print something interesting");
然后它基本上成为(伪代码):
1. if myCondition continue to line 2, else go to line 5
2. doSomething()
3. doSomethingElse()
4. go to line 1
5. println "print something interesting"
正如你所看到的,条件是只在线路检查1.如果myCondition
线2时为假例如,没有什么可以将该块短路。 (如果需要的话,您必须手动重新测试myCondition
,如果它是假,请致电break
)。即使doSomething()
被替换为while
循环,for
循环或其他任何东西,情况也是如此。
因此,如果“语句2”使外部环路条件为假,则不会停止任何操作。该程序将继续其快乐的方式,直到内循环结束为止,此时out循环完成其迭代(因为外循环块内的内循环之后没有任何内容),并返回重新测试它的条件以查看它的条件应该开始另一个迭代。只有这样外环才会检查其状态。
为了使它稍微更加明确,这里是你的代码的基本工作原理:
1. if outer-condition continue to line 2, else go to line 9
2. statements-1
3. statements-2
4. if inner-condition continue to line 5, else go to line 8
5. statements-2
6. statements-2
7. go to line 4
8. go to line 1
9. println "print something interesting"
因此,外部条件是只在1号线检查。如果它在任何时候为假,则循环甚至在它到达第1行时才会注意到,只有当它到达第8行(或者第一次遇到第1行以启动while
循环)时才会发生。
感谢您的帮助我非常感谢您花时间向我解释这一点。 – 2013-04-08 08:50:42
不客气:) – yshavit 2013-04-08 12:52:58
如果外循环为真,内循环将只执行(测试条件)。否则,如果外层循环中断,嵌套循环无法执行。
感谢您的信息。 – 2013-04-08 08:51:13
首先,while
循环条件只在每次迭代开始时检查。
如果在外循环迭代开始时条件为false
,则contol会传递外循环后面的语句,从而绕过内循环。
因此,一旦外环的条件变为false,它甚至不会检查内环的条件? – 2013-04-08 07:17:56
@JessicaM .:正确。 – NPE 2013-04-08 07:29:29
将代码块中的代码(又名大括号)想象为一个门。如果你不符合要求进入门,那么你不能看到任何内部。所以没有内部循环(因为外部循环为假)不会执行。
谢谢我欣赏那门比喻。 – 2013-04-08 08:51:47
使用本地变量来控制循环,因此您可以在循环2中检查此值。
如果条件为false,则不执行循环。所以如果外环的条件不满足,它不会执行它的主体。 – 2013-04-08 07:13:01
对不起,我的意思是说在某个时间点外环的状况会变得错误。 – 2013-04-08 07:13:52
除非您更改内部循环之前或之内的值,否则它将继续运行直至完成。 – BobTheBuilder 2013-04-08 07:14:03