2013-03-20 23 views
7

Mam następujący kod:niszczące zagnieżdżona pętla i główną pętlę

int x = 100; //Or some other value 

while(x > 0) { 

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

     x = x-2; 

     if(x == 0) 
      break; 

     } 

} 

Będzie to jednak złamać tylko do pętli. Jak mogę go mieć tak, aby łamał pętle for i while?

Pozdrawiam!

+3

Biorąc pod uwagę, że 'x' jest równe zeru, po złamaniu, warunek while również będzie fałszywy;) – akaIDIOT

Odpowiedz

6

Można użyć oznaczony przerwę, która przekierowuje wykonanie do po blok oznaczony jest tabliczką:

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

Choć w tym konkretnym przypadku, prosty break będzie działać, ponieważ jeśli x == 0 while będzie również wyjść.

+5

Uwaga obowiązkowa: http://xkcd.com/292/ – akaIDIOT

+0

Pozdrawiam! To działa :) – MrD

+0

@akaIDIOT Istnieje różnica między goto, które wysyła mil od siebie i wyjście z zagnieżdżonej pętli. To ostatnie jest w porządku, myślę. – assylias

0

Zobacz ten 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

starają się unikać przerw, nie zawsze inny sposób napisać pętlę, więc nie trzeba go co jest dużo „ładniejsze” i łatwiej zrozumieć, jeśli ktoś jeszcze musi zmodyfikować twój kod. W przykładzie pętla gdy jest niepotrzebny, ale aby pokazać, jak to możliwe:

while(x > 0) { 

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

    x = x-2; 

    } 

} 

Jeśli x jest równe 0, to dla pętli będzie po lewej stronie. Wtedy sprawdzony zostanie Twój warunek: x jest mniejsze niż 0 (zero), więc twoja pętla while również przestanie działać.

Powiązane problemy