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

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

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

1. Знакомство с циклом do-while

Представьте: вы пишете программу, которая угадывает число, загаданное пользователем. Нужно хотя бы один раз спросить число и повторять запрос, пока не угадаете. Если проверять условие заранее, обычный while может вообще не войти в цикл.

Здесь помогает do-while. В отличие от while, он всегда выполнит тело цикла хотя бы один раз — даже если условие сразу ложно. Это как получить жвачку на кассе, независимо от покупки.

Синтаксис do-while

Всё просто: ещё одна «парочка» ключевых слов в Java.


do
{
    // Тело цикла: этот код выполнится хотя бы один раз
}
while (условие);
Синтаксис цикла do-while

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

Описание шагов цикла do-while

  1. Вход в тело цикла (всегда хотя бы раз).
  2. Проверка условия.
  3. Если условие истинно — повторить тело.
  4. Если условие ложно — выйти из цикла.

2. Отличие от обычного while

Вспомним основной сценарий работы обычного while:

while (условие)
{
    // Тело цикла
}

Тело не выполнится ни разу, если условие ложно с самого начала!

Теперь пример с do-while:

do
{
    // Тело цикла
}
while (условие);

Тело цикла выполнится хотя бы один раз, даже если условие ложно сразу!

Проиллюстрируем разницу кодом:

// Обычный while
int count = 0;
while (count > 0)
{
    System.out.println("count = " + count);
    count--;
}
// Ничего не выведется

// do-while
int count2 = 0;
do
{
    System.out.println("count2 = " + count2);
    count2--;
}
while (count2 > 0);
// Выведет "count2 = 0", хотя условие ложно!

Иногда это кажется «странностью», но ровно такое поведение и нужно при пользовательском вводе и валидации данных.

3. Практические сценарии применения do-while

Где этот цикл встречается чаще всего?

Валидация данных

Популярный сценарий: просим пользователя ввести корректные данные (например, пароль не короче 6 символов) и повторяем запрос, пока всё не будет верно.

String password;
do
{
    System.out.print("Введите новый пароль (не менее 6 символов): ");
    password = console.nextLine();
}
while (password.length() < 6);

System.out.println("Пароль принят!");

Тело цикла выполнится хотя бы раз — даже если пользователь мгновенно введёт длинный пароль.

Меню в консольных приложениях

Частый паттерн: показывать меню, ждать команду и выходить только по специальной команде.

String command;
do
{
    System.out.println("Меню:");
    System.out.println("1. Показать приветствие");
    System.out.println("2. Выйти");
    System.out.print("Выберите действие: ");
    command = console.nextLine();

    if (command.equals("1")) 
    {
        System.out.println("Привет, мир!");
    }
    else if (!command.equals("2"))
    {
        System.out.println("Неизвестная команда.");
    }
}
while (!command.equals("2"));

System.out.println("Пока!");

4. Таблица: Сравнение while и других циклов

Тип цикла Проверка условия Сколько раз может выполниться тело Где уместно
while
До 0 и более раз Когда заранее неизвестно число повторений
do-while
После 1 и более раз Когда важно выполнить тело хотя бы один раз
for
До 0 и более раз Когда известно количество итераций
1
Задача
JAVA 25 SELF, 4 уровень, 3 лекция
Недоступна
Первая загрузка игры 🎮
Первая загрузка игры 🎮
1
Задача
JAVA 25 SELF, 4 уровень, 3 лекция
Недоступна
Ввод PIN-кода 💳
Ввод PIN-кода 💳
1
Задача
JAVA 25 SELF, 4 уровень, 3 лекция
Недоступна
Интерактивный терминал 💻
Интерактивный терминал 💻
1
Задача
JAVA 25 SELF, 4 уровень, 3 лекция
Недоступна
Регистрация нового аккаунта 🔒
Регистрация нового аккаунта 🔒
Комментарии (22)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Gans Electro Уровень 42
24 мая 2026
Даже не знаю что сказать. Те кто ноют о легкости задач, они прошли до конца курс? Нет. Как мы видим многие отвалились, даже несмотря на легкость
Anonymous #3384231 Уровень 7
19 мая 2026
"Условие в while должно быть таково, чтобы оно было сразу ложным (например: while (false) или while (gameVersion == 0)). Текущее условие (gameVersion != 10) истинно при значении 10, поэтому цикл повторится бесконечно; замените условие на явно ложное." Что-то не так с тестами )
Тембулат Уровень 9
24 февраля 2026
прошу составителей чуть точнее формулировать, без двусмысленности
KEN Уровень 13
20 марта 2026
Наоборот это заставляет проверять тебя разные способы решения задачи, открывая для себя что то новое. Таким образом ты растешь быстрее.
31 марта 2026
Устроишься разработчиком - попросишь бизенс-аналитика чуть точнее формулировать спецификации, без двусмысленности))
Тембулат Уровень 9
25 апреля 2026
устроился как AQA), попросил🤣
Danylo Prodius Уровень 5
21 января 2026
Орешки ... Биг Боб
Archibald26 Уровень 5
17 декабря 2025
Если все логично, то почему сложно?
Anonymous #6442887 Уровень 60
9 декабря 2025
Становиться сложнее, то есть менее понятно, но тем интереснее😀
Anonymous #6428995 Уровень 5
3 декабря 2025
На всякий случай советую всем выводимые фразы копировать в код из условия, а также перед проверкой правильности выполнения условия проверять корректность написания кода и выполнения условия при помощи кнопки "Запуск", а не сразу тыкать на "Проверка" - так вы сможете отловить и пофиксить свои ошибки перед тем, как IDE их зафейлит
C0N5P1RACY Уровень 42
17 октября 2025
Зачем в задачах сразу выставляются все do/while/if/else и тд? По факту единственное что мы делаем, это постоянно пишем System.out.println();, спасибо конечно что мы теперь сами пишем Scanner, но хотелось бы что б всего этого не было изначально, мне конечно никто не запрещает стирать это все, но после стирания и решения задачи самому, боюсь что "поломаю" сценарий у авто-проверки, и мои решения, пусть и будут правильные, но бот их не поймет. Надеюсь дальше задачи будут без этого, а то получается что я тренирую только всего пару команд, а все остальное за меня уже сделали.
Agurez Gaming Уровень 7
17 октября 2025
Ты считаешь себя очень умным, это не так) Решай пока просто можно решать, далее будет сложнее
Anonymous #6413862 Уровень 7
24 октября 2025
вот именно, дальше будет сложнее, а практиковался все это время только на println
Екатерина Уровень 9
15 января 2026
Я стираю весь внутренний код со всеми комментариями и словами, пишу сама, сценарий не ломается у авто-проверки :) В большинстве случаев, если запуск успешный, и все соответствует критериям задачи, то бот пропускает. Если нет, в любом случае, более полезно будет покопаться самому и несколько раз потыкать проверку (да, будут потрачены попытки, и потом у вас будет большое число, но как будто это совсем не важно...)
Алексей Уровень 5
7 апреля 2026
а я вот до сих пор не могу запомнить синтаксис System out, поэтому копирую этот опреатор из предыдущей задачи 🤣🤣🤣🤣
Ksanders Уровень 32
24 сентября 2025
В последней задаче почему-то не приняло мое решение c первого раза - встроенный компилятор постоянно ругался на то, что у меня в выводимом сообщении об успешной регистрации опечатка, хотя я это сообщение копировал из условия задачи, Скрин не сохранился :-(

// Сообщение об успешной регистрации
        System.out.println("Пароль надёжен, аккаунт создан!");
Goodsmack Уровень 4
26 сентября 2025
У меня так же было😄 Минут 20 сидел не мог понять в чём проблема, просто потыкал проверку ещё пару раз и на третий приняло, лол)
Алексей Уровень 5
7 апреля 2026
скорее всего чтонить с регистром букв оператора вывода
Natasha Уровень 5
19 сентября 2025
Только у меня встроенная на сайте idea не работает? запускаю проверки с кодом и ничего не происходит - либо пишет что я использую вечный цикл, потому что программа выполняется долго. Но по факту это не так - висит само приложение (я проверяю свой код в нормальной IntelliJ IDEA, так и пришлось скачать, со встроенной работать не возможно) У кого работает подскажите в каком браузере.. Я пробовала гугл и яндекс ну вот пожалуйста, всё засчитали и при этом проверьте свой код
Kidze Уровень 38
21 сентября 2025
По условию задачи пароль должен состоять из 6 и более символов, у вас введено 5, если сам код написан правильно то по идее решение будет принято, но если подставить туда ваше 12345 цикл не завершится. Думаю в этом было дело, лучше еще код скинуть чтобы было понятнее. Прогоны работают с введенными данными в хроме у меня.
Серега Батенин Уровень 12
27 сентября 2025
Вообще для Идеи есть плагин специальный и проходить лекции и решать задачи можно прям в ней, если вам там удобнее. По крайней мере с автодополнением слов и сниппетами писать код явно быстрее)
Julia Sevruk Уровень 6
27 сентября 2025
У меня было также когда в условии было <= 6 (надо было поменять на <6 и приняло)