Именованный continue
Продолжайте выполнение внешнего цикла
«Именованный continue» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Переход к следующей итерации внешнего цикла
Обычный переход к следующей итерации перезапускает только внутренний цикл. Иногда вместо этого нужно перейти к следующему проходу внешнего цикла.
Для этого Java предлагает именованный переход к следующей итерации.
Он связывает метку цикла с ключевым словом перехода к следующей итерации и позволяет выбрать, какой цикл продолжить.
Синтаксис именованного перехода к следующей итерации
Форма записи такова: перейти к следующей итерации метка;, где метка обозначает окружающий цикл.
Вместо перехода к следующей итерации внутреннего цикла выполнение переходит к следующей итерации именованного цикла.
Всё оставшееся в этой итерации внутреннего цикла пропускается.
continue outer; // jump to next iteration of 'outer'Первый пример
Здесь, когда столбец равен 2, мы переходим к следующей итерации внешнего цикла.
Это отменяет оставшуюся часть внутреннего цикла и сразу переходит к следующей строке.
public class Main {
public static void main(String[] args) {
outer:
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 3; col++) {
if (col == 2) {
continue outer;
}
System.out.println("row " + row + ", col " + col);
}
}
}
}Чтение результата
В каждой строке выводился только столбец 1. Когда столбец достигал 2, переход к следующей итерации внешний сразу переходил к следующей строке.
Столбцы 2 и 3 не выводились ни в одной строке.
В каждой новой строке внутренний цикл начинался снова со столбца 1.
Переход к следующей итерации и именованный переход
Сравните это с обычным переходом к следующей итерации. Он пропустил бы только столбец 2 и всё равно вывел бы столбец 3.
Запустите пример и обратите внимание: в каждой строке появляются и столбец 1, и столбец 3.
public class Main {
public static void main(String[] args) {
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 3; col++) {
if (col == 2) {
continue;
}
System.out.println("row " + row + ", col " + col);
}
}
}
}Главное различие
Обычный переход к следующей итерации пропускает только текущий проход внутреннего цикла, поэтому внутренний цикл продолжает работу.
Именованный переход к следующей итерации внешнего цикла отменяет весь внутренний цикл и начинает следующий проход внешнего цикла.
Одна метка меняет объём пропускаемого кода.
Пропуск целой строки
Именованный переход к следующей итерации удобен, когда одно ошибочное значение должно отменить оставшуюся часть прохода внутреннего цикла.
Здесь, если в строке встречается отрицательное число, мы пропускаем оставшуюся работу с этой строкой и переходим дальше.
public class Main {
public static void main(String[] args) {
int[][] data = {{1, 2, 3}, {4, -1, 6}, {7, 8, 9}};
rows:
for (int r = 0; r < data.length; r++) {
int sum = 0;
for (int c = 0; c < data[r].length; c++) {
if (data[r][c] < 0) {
System.out.println("Row " + r + " skipped");
continue rows;
}
sum += data[r][c];
}
System.out.println("Row " + r + " sum = " + sum);
}
}
}Разбор этого примера
Для строк 0 и 2 были выведены суммы. В строке 1 встретилось отрицательное значение, вывелось сообщение «Строка 1 пропущена», после чего выполнение перешло к следующей строке.
Важно, что строка с суммой для строки 1 не выполнялась: именованный переход пропустил её.
Фильтрация пар
Ещё один вариант использования — пропустить весь внешний элемент, как только одно внутреннее условие перестаёт выполняться.
Этот цикл выводит пары, но пропускает все значения i, для которых произведение i на j превышает 6.
public class Main {
public static void main(String[] args) {
loopI:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i * j > 6) {
continue loopI;
}
System.out.println(i + " x " + j + " = " + (i * j));
}
}
}
}Имена и расположение меток
Именованный цикл должен охватывать оператор перехода к следующей итерации. Нельзя перейти к метке, которая находится не выше этого оператора.
Выбирайте описательные имена, например строки или loopI, чтобы читатели понимали, какой цикл продолжается.
Понятная метка сама по себе служит документацией.
Когда это помогает, а когда мешает
Именованный переход к следующей итерации полезен, когда условие должно отменить оставшуюся часть внутреннего прохода и перейти дальше.
Но чрезмерное использование меток затрудняет отслеживание потока выполнения. Если обычный переход к следующей итерации или ранний возврат из метода читается проще, выберите его.
Используйте метки только там, где они действительно проясняют логику.
Быстрая проверка
Предскажите результат именованного перехода к следующей итерации.
Итоги
перейти к следующей итерации метка; пропускает оставшуюся часть внутреннего цикла и переводит именованный внешний цикл к следующей итерации.
Это отличается от обычного перехода к следующей итерации, который пропускает только один внутренний проход. Используйте метки, когда они делают логику нескольких циклов понятнее, а не просто короче.
Часто задаваемые вопросы
Урок «Именованный continue» бесплатный?
Да — полный текст урока «Именованный continue» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Именованный continue»?
Продолжайте выполнение внешнего цикла Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Именованный continue»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- break и continue
- Именованный break
- Именованный continue
- Как избежать запутанного потока выполнения