它可能有助于理解 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”使外循环条件为假,则不会停止。程序将继续进行下去,直到内循环完成,此时外循环完成它的迭代(因为在外循环块内的内循环之后没有任何内容)并返回重新测试它的条件以查看它是否应该开始另一个迭代。只有这样,外循环才会检查它的状况。
为了使它更明确一点,您的代码基本上是这样工作的:
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 行检查。如果它在任何时候变为 false,循环甚至不会注意到,直到它到达第 1 行,这只会在它到达第 8 行时发生(或第一次它当然,点击第 1 行开始while
循环)。