破嵌套循环和主回路

问题描述:

我有以下代码:破嵌套循环和主回路

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循环?

干杯!

+3

考虑到'x'当你休息时等于零,同时条件也是错误的;) – akaIDIOT 2013-03-20 14:05:17

您可以使用标记符,其执行到后的标签上标注的块重定向:

OUTER: 
while(x > 0) { 
    for(int i = 5; i > 0; i++) { 
     x = x-2; 
     if(x == 0) 
      break OUTER; 
    } 
} 

虽然在特定情况下,简单break会工作,因为如果x == 0的同时会也退出。

+5

强制性的评论:http://xkcd.com/292/ – akaIDIOT 2013-03-20 14:04:29

+0

干杯!这有效:) – MrD 2013-03-20 14:18:12

+0

@akaIDIOT goto发送给你几英里外并退出嵌套循环之间有区别。后者很好,我认为。 – assylias 2013-03-20 14:24:11

看到这个example

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; 
     } 

     } 
    } 

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循环是不必要的,但向你展示它是如何可能的:

while(x > 0) { 

    for(int i = 5; i > 0 && x!=0; i++) { 

    x = x-2; 

    } 

} 

如果x等于0,for循环会留下。然后你的while条件将被验证:x小于0(它为零),所以while循环也会停止执行。