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