Допустим, у меня есть это:
while (a) {
while (b) {
if (b == 10) {
break;
}
}
}
Вопрос: оператор break выведет меня из обоих циклов или только из внутреннего? Спасибо.
Допустим, у меня есть это:
while (a) {
while (b) {
if (b == 10) {
break;
}
}
}
Вопрос: оператор break выведет меня из обоих циклов или только из внутреннего? Спасибо.
В вашем примере инструкция break выведет вас из цикла while(b)
while(a) {
while(b) {
if(b == 10) {
break;
}
}
// break will take you here.
}
Он сломает только самый непосредственный цикл while. Используя метку, вы можете выйти из обоих циклов: взгляните на этот пример, взятый из здесь
public class Test {
public static void main(String[] args) {
outerloop:
for (int i=0; i < 5; i++) {
for (int j=0; j < 5; j++) {
if (i * j > 6) {
System.out.println("Breaking");
break outerloop;
}
System.out.println(i + " " + j);
}
}
System.out.println("Done");
}
}
Только из внутреннего. Используйте обозначенный разрыв, если вы хотите прервать определенный цикл
label1:
for(){
label2:
for(){
if(condition1)
break label1;//break outerloop
if(condition2)
break label2;//break innerloop
}
}
См. также
@Абхишеккумар
Ключевое слово Break имеет производный корень из C и Assembly, а единственная цель Break — передать управление из составного оператора, то есть цикла, условия, метода или процедур.
Пожалуйста, обратитесь к этим...
http://tigcc.ticalc.org/doc/keywords.html#break
http://www.functionx.com/cpp/keywords/break.htm
http://en.wikipedia.org/wiki/Break_statement#Early_exit_from_loops
Итак, если вы хотите выйти из двух циклов одновременно, вам нужно использовать два разрыва, то есть один во внутреннем цикле и один во внешнем цикле.
Но вы хотите остановить оба цикла одновременно, тогда вам придется использовать выход или возврат.
while (a) {
while (b) {
if (b == 10) {
break;
}
}
}
В приведенном выше коде вы разорвете самый внутренний цикл, где (т.е. immediate loop
) где break
используется.
Вы можете разорвать обе петли одновременно, используя break
с label
label1:
while (a) {
while (b) {
if (b == 10) {
break label1;
}
}
}
Он вырвется из петли, которая его сразу окружает.
Однако вы можете перейти к метке:
myLabel:
while(a) {
while(b) {
if(b == 10)
break myLabel;
}
}
Обычно я не люблю использовать этот шаблон, потому что он легко приводит к спагетти-коду. Используйте немаркированный разрыв или флаг, чтобы завершить цикл.
Любопытно, что в PHP оператор break принимает числовой параметр, который сообщает, сколько внешних циклов вы хотите прервать, например:
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "At 5<br />\n";
break 1; /* Exit only the switch. */
case 10:
echo "At 10; quitting<br />\n";
break 2; /* Exit the switch and the while. */
default:
break;
}
}
Вы можете поднять флаг, чтобы передать информацию во внешний цикл while. В этом случае информация может храниться в переменной breakOuterLoopFlag
и внешний цикл while действует в соответствии с этой информацией. См. псевдокод ниже:
int breakOuterLoopFlag = 0;
while(a){
while(b){
if(b == 10) {
breakOuterLoopFlag = 1;
break;
}
}
if(breakOuterLoopFlag == 1) {
break;
}
}
Оператор break
выведет вас из самого внутреннего цикла, содержащего этот оператор break
.
В примере внутренний цикл while.
Оператор java break не выведет вас из нескольких вложенных циклов.
Только внутренний цикл, конечно.