嵌套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"); 
+0

如果条件为false,则不执行循环。所以如果外环的条件不满足,它不会执行它的主体。 – 2013-04-08 07:13:01

+0

对不起,我的意思是说在某个时间点外环的状况会变得错误。 – 2013-04-08 07:13:52

+0

除非您更改内部循环之前或之内的值,否则它将继续运行直至完成。 – BobTheBuilder 2013-04-08 07:14:03

它可能有助于了解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循环)时才会发生。

+0

感谢您的帮助我非常感谢您花时间向我解释这一点。 – 2013-04-08 08:50:42

+0

不客气:) – yshavit 2013-04-08 12:52:58

如果外循环为真,内循环将只执行(测试条件)。否则,如果外层循环中断,嵌套循环无法执行。

+0

感谢您的信息。 – 2013-04-08 08:51:13

首先,while循环条件只在每次迭代开始时检查。

如果在外循环迭代开始时条件为false,则contol会传递外循环后面的语句,从而绕过内循环。

+0

因此,一旦外环的条件变为false,它甚至不会检查内环的条件? – 2013-04-08 07:17:56

+0

@JessicaM .:正确。 – NPE 2013-04-08 07:29:29

将代码块中的代码(又名大括号)想象为一个门。如果你不符合要求进入门,那么你不能看到任何内部。所以没有内部循环(因为外部循环为假)不会执行。

+0

谢谢我欣赏那门比喻。 – 2013-04-08 08:51:47

使用本地变量来控制循环,因此您可以在循环2中检查此值。