2013-03-20 5 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 и while?

Cheers!

+3

Учитывая, что 'x' равен нулю при разрыве, условие while также будет false;) – akaIDIOT

ответ

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

+0

Приветствия! Это работает :) – MrD

+0

@akaIDIOT Существует разница между goto, которая отправляет вам мили и выходит из вложенного цикла. Последнее прекрасно, я думаю. – assylias

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

Старайтесь избегать перерывов, всегда есть другой способ, чтобы написать свой цикл, поэтому вам не нужно что гораздо «красивее», и легче, если кто-то понять else должен изменить ваш код. В вашем примере цикл, пока не требуется, но, чтобы показать вам, как это возможно:

while(x > 0) { 

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

    x = x-2; 

    } 

} 

Если х равен 0, то для контура останется. Тогда ваше условие будет проверено: x меньше, чем 0 (оно равно нулю), поэтому ваш цикл while также перестанет выполняться.