2013-03-20 61 views
7

我有以下代碼:破嵌套循環和主迴路

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

回答

6

您可以使用標記符,其執行到後的標籤上標註的塊重定向:

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

0

看到這個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; 
     } 

     } 
    } 
1
bool done=false; 
while(!done && x > 0) { 
    for(int i = 5;!done && i > 0 ; i++) { 
     x = x-2; 
     if(x == 0){ 
      done=true; 
      break ; 
     } 
    } 
} 
0

儘量避免休息,總是有一種其他的方式來寫你的循環,所以你不需要它這是更「漂亮」,更容易理解,如果有人否則必須修改你的代碼。在您的例子中,while循環是不必要的,但向你展示它是如何可能的:

while(x > 0) { 

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

    x = x-2; 

    } 

} 

如果x等於0,for循環會留下。然後你的while條件將被驗證:x小於0(它爲零),所以while循環也會停止執行。