Оператор continue в Java
Оператор continue в Java досрочно завершает текущую итерацию цикла: операторы, оставшиеся до конца тела цикла, пропускаются, и управление переходит к следующей итерации. Сам цикл при этом не прерывается — в отличие от оператора break, который завершает цикл полностью.
Как работает continue в for, while и do-while
В циклах while и do-while оператор continue передаёт управление непосредственно условному выражению, управляющему циклом. В цикле for управление сначала переходит к итерационной части (например, i++), а затем к условному выражению.
| Тип цикла | Куда переходит управление после continue |
|---|---|
| for | Сначала к итерационному выражению (i++), затем к проверке условия |
| while | Сразу к проверке условия в начале цикла |
| do-while | К проверке условия в конце цикла |
Оператор continue допустим только внутри цикла. Если написать его вне цикла, компилятор выдаст ошибку continue outside of loop.
Частая ошибка
В цикле while инкремент счётчика находится в теле цикла. Если continue сработает раньше строки с инкрементом, счётчик не изменится и условие будет проверяться с тем же значением — получится бесконечный цикл. В цикле for такой проблемы нет: итерационное выражение выполняется всегда.
Пример: вывод только нечётных чисел
В следующем примере на консоль выводятся только нечётные значения. Если значение чётное, оператор continue досрочно завершает текущую итерацию, и System.out.print не выполняется:
public class ContinueExample {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
System.out.print(i + " ");
}
}
} Результат выполнения программы:
1 3 5 7 9 Оператор continue с меткой
Оператор continue также может использоваться с меткой — это позволяет завершить текущую итерацию не внутреннего, а внешнего цикла. В следующем примере внешний цикл помечен меткой outer. При достижении строки continue outer; завершается итерация внешнего цикла. Без метки завершалась бы итерация внутреннего цикла:
public class ContinueLabelExample {
public static void main(String[] args) {
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j > i) {
System.out.println();
continue outer;
}
System.out.print(" " + (i * j));
}
}
System.out.println();
}
} Программа выводит «треугольник» произведений i * j: как только j становится больше i, строка завершается и начинается следующая итерация внешнего цикла:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81 Метка должна стоять непосредственно перед тем циклом, к которому относится continue. Меткой может быть любой допустимый в Java идентификатор с двоеточием.
Чем continue отличается от break
Оба оператора относятся к операторам перехода, но действуют по-разному: continue пропускает оставшуюся часть текущей итерации и продолжает цикл, а break завершает цикл полностью — выполнение продолжается с первого оператора после цикла. Подробное сравнение break, continue и return — в уроке Оператор break в Java.
Часто задаваемые вопросы
Что делает оператор continue в Java?
Он пропускает оставшуюся часть тела цикла в текущей итерации и переходит к следующей: в while и do-while — сразу к проверке условия, в for — сначала к итерационному выражению, затем к условию. Цикл при этом продолжает работать.
Можно ли использовать continue вне цикла или внутри switch?
Вне цикла — нельзя: компилятор выдаст ошибку «continue outside of loop». Если switch находится внутри цикла, то continue в ветке case допустим и относится к циклу, а не к switch — в отличие от break, который завершил бы только switch.
Когда нужен continue с меткой?
Когда во вложенных циклах требуется завершить итерацию внешнего цикла, а не внутреннего. Обычный continue действует только на ближайший охватывающий цикл; continue outer; переводит выполнение к следующей итерации цикла, помеченного меткой outer.
Ухудшает ли continue читаемость кода?
Один continue в начале тела цикла для отсева неподходящих значений обычно делает код чище, чем большой вложенный if. Проблемы начинаются, когда continue разбросаны по длинному телу цикла или используются с метками без необходимости — в таких случаях лучше вынести логику в отдельный метод.
Видео объяснение
Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.
Комментарии