Breaking nested loop and main loop
本问题已经有最佳答案,请猛点这里访问。
我有以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int x = 100; //Or some other value while(x > 0) { for(int i = 5; i > 0; i++) { x = x-2; if(x == 0) break; } } |
但是,这只会破坏for循环。我怎么能得到它,这样它就打破了for和while循环?
干杯!
可以使用带标签的break,它将执行重定向到由标签标记的块之后:
1 2 3 4 5 6 7 8 | OUTER: while(x > 0) { for(int i = 5; i > 0; i++) { x = x-2; if(x == 0) break OUTER; } } |
尽管在这种特定的情况下,一个简单的
1 2 3 4 5 6 7 8 9 10 | bool done=false; while(!done && x > 0) { for(int i = 5;!done && i > 0 ; i++) { x = x-2; if(x == 0){ done=true; break ; } } } |
尽量避免中断,总会有其他方法来编写循环,这样你就不需要它了,如果有人不得不修改你的代码,那么它就更"漂亮",更容易理解。在您的示例中,while循环是不必要的,但为了向您展示它是如何实现的:
1 2 3 4 5 6 7 8 9 | while(x > 0) { for(int i = 5; i > 0 && x!=0; i++) { x = x-2; } } |
如果x等于0,则将保留for循环。然后将验证while条件:x小于0(为零),因此while循环也将停止执行。
请参阅此示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Outer: for(int intOuter=0; intOuter < intArray.length ; intOuter++) { Inner: for(int intInner=0; intInner < intArray[intOuter].length; intInner++) { if(intArray[intOuter][intInner] == 30) { blnFound = true; break Outer; } } } |