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

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

Открыта

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 лекция
Недоступна
Регистрация нового аккаунта 🔒
Регистрация нового аккаунта 🔒
Комментарии (26)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
саня
Уровень 5
24 сентября, 08:42
Подскажите. Зачем нужен знак !
Gans Electro
Уровень 59
24 сентября, 20:49
Это отрицание. Приставка "не". Например "!=" - не равно.
Gans Electro
Уровень 59
24 мая, 13:25
Даже не знаю что сказать. Те кто ноют о легкости задач, они прошли до конца курс? Нет. Как мы видим многие отвалились, даже несмотря на легкость
Станиславпрораб в стройка
24 сентября, 20:36
Это отрицание. Приставка "не". Например "!=" - не равно.
Gans Electro
Уровень 59
24 сентября, 20:49
спасибо
Anonymous #3384231
Уровень 7
19 мая, 09:02
"Условие в while должно быть таково, чтобы оно было сразу ложным (например: while (false) или while (gameVersion == 0)). Текущее условие (gameVersion != 10) истинно при значении 10, поэтому цикл повторится бесконечно; замените условие на явно ложное." Что-то не так с тестами )
Тембулат
Уровень 9
24 февраля, 10:56
прошу составителей чуть точнее формулировать, без двусмысленности
KEN Software Developer
20 марта, 11:34
Наоборот это заставляет проверять тебя разные способы решения задачи, открывая для себя что то новое. Таким образом ты растешь быстрее.
31 марта, 17:33
Устроишься разработчиком - попросишь бизенс-аналитика чуть точнее формулировать спецификации, без двусмысленности))
Тембулат
Уровень 9
25 апреля, 13:10
устроился как AQA), попросил🤣
Danylo Prodius
Уровень 5
21 января, 17:48
Орешки ... Биг Боб
Archibald26 Java Developer
17 декабря 2025, 19:55
Если все логично, то почему сложно?
Anonymous #6442887
Уровень 60
9 декабря 2025, 17:29
Становиться сложнее, то есть менее понятно, но тем интереснее😀
Anonymous #6428995
Уровень 5
3 декабря 2025, 13:49
На всякий случай советую всем выводимые фразы копировать в код из условия, а также перед проверкой правильности выполнения условия проверять корректность написания кода и выполнения условия при помощи кнопки "Запуск", а не сразу тыкать на "Проверка" - так вы сможете отловить и пофиксить свои ошибки перед тем, как IDE их зафейлит
C0N5P1RACY QA Automation Engineer
17 октября 2025, 18:44
Зачем в задачах сразу выставляются все do/while/if/else и тд? По факту единственное что мы делаем, это постоянно пишем System.out.println();, спасибо конечно что мы теперь сами пишем Scanner, но хотелось бы что б всего этого не было изначально, мне конечно никто не запрещает стирать это все, но после стирания и решения задачи самому, боюсь что "поломаю" сценарий у авто-проверки, и мои решения, пусть и будут правильные, но бот их не поймет. Надеюсь дальше задачи будут без этого, а то получается что я тренирую только всего пару команд, а все остальное за меня уже сделали.
Agurez Gaming
Уровень 7
17 октября 2025, 20:20
Ты считаешь себя очень умным, это не так) Решай пока просто можно решать, далее будет сложнее
Anonymous #6413862
Уровень 7
24 октября 2025, 13:38
вот именно, дальше будет сложнее, а практиковался все это время только на println
Екатерина
Уровень 9
15 января, 08:13
Я стираю весь внутренний код со всеми комментариями и словами, пишу сама, сценарий не ломается у авто-проверки :) В большинстве случаев, если запуск успешный, и все соответствует критериям задачи, то бот пропускает. Если нет, в любом случае, более полезно будет покопаться самому и несколько раз потыкать проверку (да, будут потрачены попытки, и потом у вас будет большое число, но как будто это совсем не важно...)
Алексей
Уровень 5
7 апреля, 13:52
а я вот до сих пор не могу запомнить синтаксис System out, поэтому копирую этот опреатор из предыдущей задачи 🤣🤣🤣🤣
Ksanders
Уровень 32
24 сентября 2025, 16:48
В последней задаче почему-то не приняло мое решение c первого раза - встроенный компилятор постоянно ругался на то, что у меня в выводимом сообщении об успешной регистрации опечатка, хотя я это сообщение копировал из условия задачи, Скрин не сохранился :-(
// Сообщение об успешной регистрации
        System.out.println("Пароль надёжен, аккаунт создан!");
Goodsmack
Уровень 4
26 сентября 2025, 12:04
У меня так же было😄 Минут 20 сидел не мог понять в чём проблема, просто потыкал проверку ещё пару раз и на третий приняло, лол)
Алексей
Уровень 5
7 апреля, 13:53
скорее всего чтонить с регистром букв оператора вывода