Заявление о перерыве
Иногда необходимо выйти из цикла , прежде чем цикл завершит полную итерацию по всем значениям шага. Например, перебирая список чисел, пока не найдете число, удовлетворяющее определенному условию. Или зацикливание потока символов из файла, пока не будет прочитан определенный символ.
В следующем примере мы используем простой цикл for для вывода значений от 0 до 9:
for(int i=0; i<10; i++) {
System.out.println(i);
}
Выход:
0
1
2
3
4
5
6
7
8
9
Теперь, если мы добавим оператор break, когда i == 4, наш код выйдет из цикла, как только я равняюсь 4. Вы можете использовать оператор break для выхода из циклов for, while и циклов do-while. Оператор break будет выходить только из текущего цикла. Чтобы выйти из внешнего цикла из вложенного внутреннего цикла, вам необходимо использовать метки с оператором break.
for(int i=0; i<10; i++) {
System.out.println(i);
if(i==4) {
break;
}
}
Выход:
0
1
2
3
4
Продолжить заявление
Java continue инструкция пропускает текущую итерацию цикла и переходит непосредственно к следующей итерации. После вызова оператора continue в цикле for выполнение цикла выполнит значение шага и оценит логическое условие перед продолжением следующей итерации. В следующем примере мы распечатываем все значения от 0 до 9 в цикле, но пропускаем распечатку 4.
for(int i=0; i<10; i++) {
if(i==4) {
continue;
}
System.out.println(i);
}
Выход:
0
1
2
3
5 <---- SKIPPED OVER 4 and continued with next loop iteration
6
7
8
9
Метка петли - оператор разрыва
Вы можете использовать метки во вложенных циклах , указав, где вы хотите продолжить выполнение после выхода из внутреннего цикла. Обычно оператор break будет выходить только из самого внутреннего цикла, поэтому, когда вы хотите выйти из внешнего цикла, вы можете использовать метки для достижения этой цели, по сути, делая что-то похожее на оператор goto.
В следующем примере используются 3 цикла, все они вложены друг в друга. Поскольку нет никакого способа полностью выйти из самого внешнего цикла изнутри самого внутреннего цикла, мы можем использовать метку «external1», чтобы выполнить это, и указать метку рядом с оператором break.
outer1:
for(int i=0; i<5; i++) {
for(int j=0; j<4; j++) {
for(int k=0; k<2; k++) {
System.out.println("[" + i + "][" + j + "][" + k + "]");
if(j == 3) {
break outer1;
}
}
}
}
Выход:
[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0]
Обратите внимание, что последняя отображаемая строка имеет вид « 0 [0]», где j == 3, и именно здесь мы назвали «break external1;», чтобы выйти из самого внешнего цикла.
Loop Labels - Продолжить заявление
Вы также можете использовать метки с ключевым словом continue для продолжения цикла с определенной точки. Если взять предыдущий пример и просто изменить одну строку, указав continue outer1;
вместо break outer1;
, цикл продолжит цикл с метки outer1
вместо выхода из цикла. Обратите внимание, как каждый раз, когда вызывается continue outer1;
, код продолжается из внешнего цикла после увеличения индекса цикла i на 1.
outer1:
for(int i=0; i<5; i++) {
for(int j=0; j<4; j++) {
for(int k=0; k<2; k++) {
System.out.println("[" + i + "][" + j + "][" + k + "]");
if(j == 3) {
continue outer1;
}
}
}
[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[1][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[1][0][1]
[1][1][0]
[1][1][1]
[1][2][0]
[1][2][1]
[1][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[2][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[2][0][1]
[2][1][0]
[2][1][1]
[2][2][0]
[2][2][1]
[2][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[3][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[3][0][1]
[3][1][0]
[3][1][1]
[3][2][0]
[3][2][1]
[3][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[4][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[4][0][1]
[4][1][0]
[4][1][1]
[4][2][0]
[4][2][1]
[4][3][0]
Источник: Циклы в Java - Ultimate Guide