0Pricing
Java Academy · Урок

Именованный 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 — локальная установка не требуется.

Все уроки этого курса

  1. break и continue
  2. Именованный break
  3. Именованный continue
  4. Как избежать запутанного потока выполнения
← Назад к Java Academy