JavaRush /Курсы /JAVA 25 SELF /Цикл while: знакомство и нюансы работы

Цикл while: знакомство и нюансы работы

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

1. Введение

В программировании регулярно приходится выполнять одни и те же действия много раз подряд. Например:

  • Пройтись по всем элементам списка.
  • Считать с клавиатуры значения, пока пользователь не введет нужное.
  • Считать сумму всех чисел от 1 до 100.
  • Запрашивать у пользователя пароль до тех пор, пока он не станет правильным.

Если попытаться всё это реализовать без циклов, получится длинно, скучно и не масштабируемо. Представьте, что вы пишете программу-калькулятор и решаете складывать числа от 1 до 10 вручную:

int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
// ... и так 10 раз. Мда.
Ручное повторение без цикла — неудобно!

Вы заскучаете раньше, чем закончите! Решение — циклы. Они позволяют описать повторение действий лаконично и понятно. Сегодня мы познакомимся с самым базовым, но чертовски полезным циклом — while.

2. Знакомство с циклом while

Синтаксис и базовая схема

Цикл while — это "попугай" в мире программирования: он повторяет один и тот же фрагмент кода до тех пор, пока выполняется некое условие. Как только условие перестаёт быть истинным, попугай замолкает (цикл заканчивается).

Синтаксис:

while (условие)
{
    // Тело цикла
}
Запись цикла while с блоком команд

Диаграмма

Вот простая блок-схема для понимания работы цикла while:

uml-while

3. Примеры: цикл while в действии

Классический счетчик

Сделаем простую программу, которая считает от 1 до 5 и выводит числа:

int i = 1;
while (i <= 5)
{
    System.out.println("Шаг № " + i);
    i++; // Не забудьте увеличить счетчик!
}
// Выведет:
// Шаг № 1
// Шаг № 2
// Шаг № 3
// Шаг № 4
// Шаг № 5

Обратите внимание: если забыть увеличить переменную i, цикл никогда не завершится (наш попугай станет бессмертным и вечным повторятелем). Это называется бесконечный цикл — пугающая штука.

Ввод с клавиатуры до нужного значения

Нередко цикл используется для того, чтобы "дожимать" пользователя до верного ответа:

String password = "";
while (!password.equals("qwerty"))
{
    System.out.print("Введите пароль: ");
    password = console.nextLine();
}
System.out.println("Добро пожаловать!");

Здесь программа просит ввести пароль, пока вы не напечатаете магическое "qwerty". Не забудьте: если удалить строку password = console.nextLine();, цикл снова станет бесконечным (будет спрашивать пароль, но не будет читать ввод — залипнет навсегда, как сломавшийся робот).

4. Виды и сценарии использования цикла while

Обычный цикл while

Этот цикл, как было показано выше, интересуется условием до первой итерации. Если условие ложно сразу — тело цикла не выполнится ни разу.

Пример: условие не выполняется сразу

int i = 10;
while (i < 5)
{
    System.out.println(i); // Не выполнится никогда!
}

Что, собственно говоря, логично. Именно так, как тут и написано.

Вложенные циклы while

Иногда нужно сделать цикл внутри цикла. Например, перебрать все строки и в каждой из них проверить все символы. На данном этапе это скорее авантюра, но вот пример по-простому:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        System.out.println("i = " + i + ", j = " + j);
        j++;
    }
    i++;
}

// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2

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

Бесконечный цикл

Иногда циклы завершаются, а иногда — живут вечно.

while (true)
{
    System.out.println("Я вечен!");
}

Используется редко, обычно для каких-нибудь фоновых процессов (например, работа сервера), но тоже применяется на практике.

5. Как не писать глупости: частые ошибки с while

В программировании цикл — это как электричество: классно, но надо знать правила безопасности.

Проблема 1: бесконечный цикл по невнимательности

Очень часто новички забывают обновлять переменную, от которой зависит условие. В результате цикл работает "бесконечно", и приходится останавливать программу принудительно (например, сочетанием Ctrl + C).

int i = 1;
while (i <= 5)
{
    System.out.println(i);
    // i++;  // ОЙ! Забыли увеличить i
}

Проблема 2: неверно заданное условие

Иногда разработчик сам себе роет яму: условие, наоборот, никогда не бывает истинным. В результате цикл не выполняется вообще.

int i = 10;
while (i < 5)
{
    System.out.println(i); // Данный код никогда не сработает.
    i++;
}

Проблема 3: ошибка с типами данных

В условии цикла всегда должно быть булево выражение — то есть результат вычислений должен быть true или false.

int number = 5;
while (number) // Ошибка! Ожидался boolean, а не int.
{
    number--;
}
1
Задача
JAVA 25 SELF, 4 уровень, 1 лекция
Недоступна
Обратный отсчет перед стартом 🚀
Обратный отсчет перед стартом 🚀
1
Задача
JAVA 25 SELF, 4 уровень, 1 лекция
Недоступна
Разблокировка смартфона 📱
Разблокировка смартфона 📱
1
Задача
JAVA 25 SELF, 4 уровень, 1 лекция
Недоступна
Вывод мест в кинотеатре 🎞️
Вывод мест в кинотеатре 🎞️
1
Задача
JAVA 25 SELF, 4 уровень, 1 лекция
Недоступна
Учет трат на кофе ☕
Учет трат на кофе ☕
Комментарии (29)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #3627377 Уровень 4
23 июня 2026
хапхахахах говорящий и бессмертный попугай
Let's Weapon Уровень 7
11 июня 2026
"Учет трат на кофе ☕" очень странное условие. очень странное решение со стороны javaRush. public static void main(String[] args) { // Создаем Scanner для чтения данных с консоли Scanner console = new Scanner(System.in); // Сумма всех введенных стоимостей double sum = 0; // Запрашиваем первую стоимость чашки кофе System.out.println("Введите стоимость чашки кофе (отрицательное число для завершения):"); double cost = console.nextDouble(); // Используем цикл while для продолжения ввода до тех пор, пока не будет введено отрицательное число while (cost >= 0) { // Добавляем введенную стоимость к общей сумме sum += cost; // Запрашиваем следующую стоимость System.out.println("Введите стоимость чашки кофе (отрицательное число для завершения):"); cost = console.nextDouble(); } // Выводим итоговую сумму расходов на кофе (отрицательное значение в сумму не входит) System.out.println(sum); } } вы учите простоте решения, а сами даете закарюченное решение. разве этот вариант не проще ? import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner console = new Scanner(System.in); int total = 0; // общая сумма int price = 0; // цена одной чашки while (price >= 0) { // пока цена НЕ отрицательная System.out.print("Укажите стоимость одной чашки: "); price = console.nextInt(); if (price >= 0) { // отрицательное число НЕ добавляем total += price; } } System.out.println("Общая сумма: " + total); } }
30 мая 2026
4 задача,проверка работает некорркктно.запускал одно и тоже решение ( не меняя) каждый раз выводит совершенно разные(видимо вслучайном порядке) пункты которые не правильно, в итоге с 6 пытки решение прошло.
Камила Ибраева Уровень 4
27 мая 2026
пыталась решить 4-ую не смогла бы никак даже с подсказками
Камила Ибраева Уровень 4
23 мая 2026
вообще не понимаю и не могу понять ничего из этого
Igor Erokhin Уровень 5
10 апреля 2026
У меня такое ощущение, что вторую задачу делал какой-то другой человек в отличии от предыдущих. Валидатор категорически не принимал дополнительные строчки вывода на экран, в сравнении с предыдущими задачами. Мой совет тем, кто будет делать - выполните ровно то, что в условии - в этой задаче запрещено думать как здравомыслящий человек. Никаких выводов на экран: "Введите пароль" или "Пароль неверный" не должно быть. Должна быть только функция ввода.
eugene_amelchenko Уровень 4
18 марта 2026
Уф, хороша 4-ая)
Vinse Уровень 4
8 марта 2026
Четвертая задачка на самом деле очень простая, однако, из-за невнимательности я не осилил ее с первого раза - забыл проинициализировать, т.е. присвоить нулевое значение переменной, означающей сумму всех покупок - несмотря на то, что компилятор прямо и конкретно указывал на ошибку 😁
10 февраля 2026
4-я задача понравилась. Но надо сразу обьявлять в условии, что переменные должны быть double.
KEN Уровень 13
20 марта 2026
Почему double, разве с int не работает?
Кэрривайт Уровень 25
7 февраля 2026
Я успешно справилась с созданием бесконечного цикла🤡