JavaRush /Курсы /JAVA 25 SELF /Вложенные циклы и их применение

Вложенные циклы и их применение

JAVA 25 SELF
4 уровень , 5 лекция
Открыта

1. Введение

Начнем с вопроса: для чего вообще нужно вкладывать один цикл внутрь другого? Дело в том, что часто наши данные или задачи организованы не просто в одну линию, а, например, в таблицу, сетку или даже в многомерную структуру. Допустим, вы хотите вывести на экран таблицу умножения, пройтись по двумерному массиву или пересчитать пересечения между всеми парами элементов. Здесь вам одного цикла явно не хватит — нужен цикл в цикле.

В программировании вложенный цикл — это как два будильника: наружный начинает звонить, а внутри него запускается еще один, который будет звенеть каждый раз, пока первый активен. Так, пока идет одна «внешняя» итерация, внутренняя проходит весь свой путь (и делает это снова и снова для каждой итерации внешнего).

Хороший пример — часы и минуты. Часы — это внешний цикл от 0 до 23, минуты — внутренний цикл от 0 до 59. На каждое изменение внешнего цикла внутренний успевает пробежать все свои значения.

2. Синтаксис вложенных циклов

В Java синтаксис вложенных циклов ничем не отличается от обычных циклов — вы просто пишете один цикл внутри тела другого. Посмотрим на примеры с for и while:

// Внешний цикл for
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 4; j++)  // Внутренний цикл for
    {
        System.out.print(i + "," + j + " ");
    }
    System.out.println(); // Переход на новую строку после внутреннего цикла
}

Здесь внешний цикл контролирует переменную i (от 0 до 2), а внутренний — переменную j (от 0 до 3). Для каждого значения i внутренний цикл полностью проходит от j == 0 до j == 3. Если вы выполните этот код, увидите приятную табличку координат:

0,0 0,1 0,2 0,3 
1,0 1,1 1,2 1,3 
2,0 2,1 2,2 2,3 

Аналогичный пример с использованием while:

int i = 0;
while (i < 3)
{
    int j = 0;
    while (j < 4)
    {
        System.out.print(i + "," + j + " ");
        j++;
    }
    System.out.println();
    i++;
}

Обратите внимание: внутри каждого прохода внешнего цикла переменная внутреннего цикла (j) должна быть заново инициализирована, иначе мы увидим только одну строку!

3. Примеры работы вложенных циклов

Пример 1: вывод шахматной доски (8x8)

Пусть наша первая задача — вывести на экран классическую шахматную доску в виде черных и белых клеток (пусть ‘#’ — черная, ‘.’ — белая). Реализуем с помощью вложенных циклов for:

for (int row = 0; row < 8; row++)
{
    for (int col = 0; col < 8; col++)
    {
        // Если сумма номеров строки и столбца четная — клетка белая, иначе черная
        if ((row + col) % 2 == 0)
            System.out.print("_");
        else
            System.out.print("#");
    }
    System.out.println(); // После каждого ряда перенос строки
}

Результат:

_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_

Важный момент: вложенность обеспечивает то, что для каждой строки (row) мы полностью проходим по всем столбцам (col). Без вложенности мы не получили бы структуру доски — только одну строку или одну колонку.

Пример 2: таблица умножения

Один из классических кандидатов на вложенные циклы! Давайте выведем таблицу умножения 1–9:

for (int i = 1; i <= 9; i++)
{
    for (int j = 1; j <= 9; j++)
    {
        System.out.print(i * j + "\t");
    }
    System.out.println();
}

Форматирование i * j + "\t" добавляет отступы, чтобы таблица выглядела аккуратно.

Результат:

  1   2   3   4   5   6   7   8   9 
  2   4   6   8  10  12  14  16  18 
  3   6   9  12  15  18  21  24  27 
  4   8  12  16  20  24  28  32  36 
...
  9  18  27  36  45  54  63  72  81 

4. Вложенные циклы и управление ими — нюансы

О влиянии break и continue во вложенных циклах

Вот тут многие новички попадаются! Если вы используете break или continue во внутреннем цикле, они влияют только на этот цикл. Внешний продолжает свою работу как ни в чем не бывало.

Пример: досрочный выход только из внутреннего цикла

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 5; j++)
    {
        if (j == 3)
            break; // выскакиваем только из внутреннего цикла!
        System.out.print(i + "," + j + " ");
    }
    System.out.println();
}

Результат:

0,0 0,1 0,2 
1,0 1,1 1,2 
2,0 2,1 2,2 

Если вам нужно выйти сразу из двух вложенных циклов (например, срочно завершить поиск при первом успешном совпадении в таблице), обычно используют флаг или специальный прием (например, return — если всё происходит внутри функции).

5. Визуализация вложенных циклов

Иногда бывает сложно «увидеть» последовательность исполнения вложенных циклов. Взглянем на следующую блок-схему:

nested-loops-scheme

В табличной форме — сколько всего итераций будет при i от 1 до 3, j от 1 до 4?

i j (перебирается для каждого i) Итераций внутреннего цикла
1 1, 2, 3, 4 4
2 1, 2, 3, 4 4
3 1, 2, 3, 4 4
Всего: 3 × 4 = 12

6. Ошибки и подводные камни при работе с вложенными циклами

Распространенная ошибка — неверно инициализировать переменную внутреннего цикла. Например, объявить её вне внешнего цикла, но не сбрасывать на каждом шаге. В итоге внутренний цикл может не выполняться вовсе или выполняться неправильно.

int j = 0;
for (int i = 0; i < 3; i++)
{
    while (j < 4) // Ой! j уже мог быть равен 4 после первой итерации.
    {
        System.out.print(i + "," + j + " ");
        j++;
    }
    System.out.println();
}

Здесь цикл отработает только один раз. Не забывайте инициализировать переменные внутренних циклов внутри внешних!

Также, если случайно написать два вложенных цикла с одинаковыми переменными (for (int i = 0; ...) { for (int i = 0; ...) { ... } }), компилятор вас поругает: переменная уже определена.

1
Задача
JAVA 25 SELF, 4 уровень, 5 лекция
Недоступна
Координатная сетка на радаре 🗺️
Координатная сетка на радаре 🗺️
1
Задача
JAVA 25 SELF, 4 уровень, 5 лекция
Недоступна
Прямоугольник из астероидов ⭐
Прямоугольник из астероидов ⭐
1
Задача
JAVA 25 SELF, 4 уровень, 5 лекция
Недоступна
Создание игрового поля 🎲
Создание игрового поля 🎲
1
Задача
JAVA 25 SELF, 4 уровень, 5 лекция
Недоступна
Подбор идеального пароля 🔒
Подбор идеального пароля 🔒
1
Опрос
Циклы, 4 уровень, 5 лекция
Недоступен
Циклы
Циклы while, for, do-while
Комментарии (21)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анна Клушкина Уровень 12
2 января 2026
⛏ Продолжаем продираться
hottabych007 Уровень 14
12 декабря 2025
Классная тема в этой лекции
Азат Басиров Уровень 5
30 ноября 2025
в первой задаче не понял для чего было добавлено еще одно условие, но я там ничего не писал и задача решилась , но по этому пункту вышла ошибка
seeoxxx Уровень 4
1 декабря 2025
if (j < 3) { System.out.print(" "); }
Daniil Tokarev Уровень 8
1 декабря 2025
Так же сбило с толку, решил сделать без условия и тоже прошло
kuzie Уровень 5
18 ноября 2025
Я немного в непонятках, во время прохождения теста был вопрос "Какой из приведённых ниже циклов не выполнит тело ни разу, если условие ложно с самого начала?". Я ответил while, но мне засчитало ошибку, но ведь ответ правильный, я даже в компиляторе проверил, оно не выполняет ни разу.. P.S. Тьфу, оказывается можно было выбрать for и while, ну что за кривые ответы, я думал это просто непонятный ответ для "Отвлечения"
x4Sting Уровень 9
11 ноября 2025
Во втором задании по условию пробелы должны быть между символами '⭐', но правильное решение требует пробел и после крайнего символа😫
Xaxatumba Уровень 38
4 ноября 2025
А что это за волшебные циклы A и C ? Вы в лекциях не упоминали что существуют такие циклы.
Nazzgrond Уровень 5
4 ноября 2025
Подразумеваются ответы А и С. То есть while и for.
Xaxatumba Уровень 38
5 ноября 2025
А почему не 1 и 3, или a) или с) или т.п. Формулировка подразумеваете именно название циклов. Так что цикл с названием А и цикл с название С нам не объясняли. И такие циклы явно не существуют.
Nazzgrond Уровень 5
5 ноября 2025
А вот это уже вопрос к составителю курса)
29 октября 2025
В четвертом задании нужно считать 10 цифрой?
Agurez Gaming Уровень 2
18 октября 2025
Че там, где люди которым было легко?
Rust =)) Уровень 7
1 октября 2025
утверждение: "Здесь цикл отработает только один раз." вносит путаницу (в примере два цикла). Уточните пожалуйста, что отработает внешний цикл один раз.
Julia Sevruk Уровень 6
27 сентября 2025
В описании " ‘.’ — белая" написано не корректно, так как должно быть " ‘_’ — белая" - потому что в коле так отображается