1. Знакомство с циклом do-while
Представьте: вы пишете программу, которая угадывает число, загаданное пользователем. Нужно хотя бы один раз спросить число и повторять запрос, пока не угадаете. Если проверять условие заранее, обычный while может вообще не войти в цикл.
Здесь помогает do-while. В отличие от while, он всегда выполнит тело цикла хотя бы один раз — даже если условие сразу ложно. Это как получить жвачку на кассе, независимо от покупки.
Синтаксис do-while
Всё просто: ещё одна «парочка» ключевых слов в Java.
do
{
// Тело цикла: этот код выполнится хотя бы один раз
}
while (условие);
do-while
Обратите внимание на точку с запятой ; в конце после скобки условия! В обычном while её нет, а тут есть — классический капкан для новичков.
Описание шагов цикла do-while
- Вход в тело цикла (всегда хотя бы раз).
- Проверка условия.
- Если условие истинно — повторить тело.
- Если условие ложно — выйти из цикла.
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 и других циклов
| Тип цикла | Проверка условия | Сколько раз может выполниться тело | Где уместно |
|---|---|---|---|
|
До | 0 и более раз | Когда заранее неизвестно число повторений |
|
После | 1 и более раз | Когда важно выполнить тело хотя бы один раз |
|
До | 0 и более раз | Когда известно количество итераций |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ