Я знаю, что оператор break
выпрыгивает из цикла, но выпрыгивает ли он из вложенных циклов или только из его текущего?
В Java, как разрыв взаимодействует с вложенными циклами?
Ответ 1
Без какого-либо украшения break
выйдет из самого внутреннего цикла. Таким образом, в этом коде:
while (true) { // A
while (true) { // B
break;
}
}
break
только выходит из цикла B
, поэтому код будет циклически навсегда.
Однако у Java есть функция, называемая "break", в которой вы можете назвать свои циклы, а затем указать, из какого из них выйти. Например:
A: while (true) {
B: while (true) {
break A;
}
}
Этот код не будет зацикливаться навсегда, потому что break
явно оставляет цикл A
.
К счастью, эта же логика работает для continue
. По умолчанию continue
выполняет следующую итерацию самого внутреннего цикла, содержащего оператор continue
, но его также можно использовать для перехода к итерациям внешнего цикла, указав метку цикла для продолжения выполнения.
В языках, отличных от Java, например, C и С++, этот оператор с надписью "помеченный разрыв" не существует, и непросто вырваться из многократного вложенного цикла. Это можно сделать с помощью оператора goto
, хотя обычно это не одобряется. Например, вот что такое вложенный разрыв может выглядеть как на C, предполагая, что вы готовы игнорировать совет Дейкстры и использовать goto
:
while (true) {
while (true) {
goto done;
}
}
done:
// Rest of the code here.
Надеюсь, это поможет!
Ответ 2
По умолчанию он выпрыгивает из самого внутреннего цикла. Но вы можете указать ярлыки и совершить скачок внешних петель.
Ответ 3
Вы также можете выйти из-за использования Исключения, поэтому вы можете обрабатывать несколько причин.
void fkt1() {
try {
while (true)
fkt2();
} catch (YourAbortException e) {
e.printStackTrace();
}
//go on
}
void fkt2() {
while (true)
if (abort)
throw new YourAbortException();
}
Ответ 4
он прерывает 1 цикл. очень просто. для ex:
for loop
for loop
break;
end for loop
end for loop
вырывается из внутреннего цикла, но все еще во внешнем цикле