Без каких-либо украшений, 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.
Надеюсь, это поможет!