Do while Java и цикл while: как работают и чем отличаются

Цикл do while Java проверяет условие после выполнения тела, а while – перед ним. Поэтому while может пропустить тело, а do-while выполняет его минимум 1 раз. Условие продолжения цикла должно иметь тип boolean.

Цикл while Java с примерами счетчика и обхода массива

Цикл while в Java повторяет тело, пока условие возвращает true. Перед каждой итерацией программа заново проверяет условие.

while (condition) {
    // Тело цикла
}

Вместо condition запишите выражение типа boolean, например num < 10. Если первая проверка вернет false, программа пропустит тело.

Блок-схема работы цикла while в Java

Пример со счетчиком от 0 до 9

Этот код выводит числа от 0 до 9. Переменная num хранит текущий счетчик.

int num = 0;
while (num < 10) {
    System.out.println(num);
    num++;
}

Сначала программа проверяет условие 0 < 10. После вывода num++ увеличивает значение на 1. При значении 10 условие становится ложным.

Программа напечатает 10 строк:

0
1
2
3
4
5
6
7
8
9

Пример обхода массива

Счетчик index позволяет обратиться к каждому элементу массива по очереди.

String[] names = {"Doc", "Dopey", "Bashful", "Grumpy", "Sneezy", "Sleepy", "Happy"};
int index = 0;
while (index < names.length) {
    System.out.println(names[index]);
    index++;
}

Программа выведет 7 имен в порядке их расположения:

Doc
Dopey
Bashful
Grumpy
Sneezy
Sleepy
Happy

Первый элемент массива имеет индекс 0, последний – names.length - 1. Условие index < names.length не дает обратиться за границы массива.

Цикл do while Java: проверка после тела

Цикл do-while сначала выполняет тело, затем проверяет условие продолжения. Используйте его, когда действие должно произойти хотя бы 1 раз.

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

После условия do-while ставится точка с запятой. Без нее компилятор сообщит об ошибке синтаксиса.

Пример проверки ввода пользователя

Игра повторяет запрос, пока пользователь вводит неправильное имя. Импорт нужен для работы с классом Scanner.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String guess;

        do {
            System.out.print("Угадайте имя: ");
            if (!scanner.hasNextLine()) {
                return;
            }
            guess = scanner.nextLine();
        } while (!"Daffy Duck".equals(guess));

        System.out.println("Поздравляю! Вы угадали имя!");
    }
}

Класс Scanner читает строки из System.in – стандартного потока ввода. Проверка hasNextLine() завершает программу, если поток закончился.

Метод equals() сравнивает ответ со строкой "Daffy Duck". Неправильный ответ сохраняет условие true, а правильный завершает цикл.

Диалог при двух попытках выглядит так:

Угадайте имя: Doc
Угадайте имя: Daffy Duck
Поздравляю! Вы угадали имя!

Переменная guess объявлена перед циклом из-за области видимости. Переменная, объявленная внутри do { }, недоступна в условии while (...).

Сравнение учитывает регистр и пробелы, поэтому вводите имя точно.

Операторы break и continue в циклах Java

Оператор break завершает ближайший цикл. Оператор continue пропускает оставшуюся часть текущей итерации.

Оба оператора работают в while и do-while. Используйте break для досрочного выхода, а continue – для перехода к следующей проверке условия.

int num = 0;
while (num < 10) {
    num++;
    if (num % 2 == 0) {
        continue;
    }
    if (num > 5) {
        break;
    }
    System.out.println(num);
}

Программа выводит 3 нечетных числа:

1
3
5

При четном числе continue пропускает проверку и вывод. При значении 7 оператор break завершает цикл до печати числа.

В while оператор continue передает управление к проверке условия. В do-while он ведет к условию после тела.

Бесконечный цикл Java: while true Java и выход через break

Конструкция while (true) задает условие, которое всегда истинно. Для управляемого выхода добавьте break в ветку с командой завершения.

Чтение ввода до команды выхода

Программа повторяет введенные строки до команды exit или завершения потока ввода.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.print("Введите текст или exit: ");
            if (!scanner.hasNextLine()) {
                break;
            }
            String line = scanner.nextLine();
            if ("exit".equals(line)) {
                break;
            }
            System.out.println("Вы ввели: " + line);
        }

        System.out.println("Ввод завершен.");
    }
}

Введите Привет, затем exit. Консоль покажет такой диалог:

Введите текст или exit: Привет
Вы ввели: Привет
Введите текст или exit: exit
Ввод завершен.

Ожидание строки пользователя не означает зависание. Цикл завершится, когда программа достигнет одного из операторов break.

Забытое изменение счетчика

В этом фрагменте значение num постоянно равно 0:

int num = 0;
while (num < 10) {
    System.out.println(num);
    // Ошибка: забыли увеличить счетчик
}

Условие остается истинным, поэтому программа бесконечно печатает одно число. Добавьте num++ после вывода.

Точка с запятой после while

В конструкции while (condition); точка с запятой образует пустое тело. Следующий блок уже не относится к циклу.

int num = 0;
while (num < 10); // Цикл имеет пустое тело
{
    num++;
}

Счетчик не меняется внутри пустого тела, поэтому условие остается истинным. Удалите точку с запятой после закрывающей скобки условия.

Условие, которое не становится ложным

Вычисления с double могут накапливать погрешность. Точное равенство после последовательных прибавлений не гарантировано.

double value = 0.0;
while (value != 1.0) {
    value += 0.1;
}

Значение может перескочить через 1,0 без точного совпадения. Поэтому условие value != 1.0 способно оставаться истинным.

Если нужны ровно 10 шагов, используйте целочисленный счетчик:

int step = 0;
while (step < 10) {
    step++;
    double value = step / 10.0;
    System.out.println(value);
}

Как остановить зациклившуюся программу

В консоли, где запущена программа, нажмите Ctrl+C. При запуске из IDE нажмите кнопку остановки «Stop».

Принудительная остановка завершает процесс, но не исправляет условие. Перед повторным запуском проверьте изменение переменных и достижимость break.

Когда выбирать while, do-while и for

Выбирайте конструкцию по моменту проверки условия и способу управления повторениями.

ЦиклКогда проверяется условиеМинимум итерацийТипичная задача
whileПеред телом0Повторять действие, пока выполняется условие
do-whileПосле тела1Запросить ввод и проверить ответ
forПеред телом0Перебрать диапазон со счетчиком

Для for начальное значение, условие и изменение счетчика находятся в одной строке:

for (int num = 0; num < 10; num++) {
    System.out.println(num);
}

Синтаксис while и do-while также разобран в официальном учебнике Oracle.

Какой цикл выбрать для задачи

Для консольного меню с несколькими командами используйте while (true). Обрабатывайте команды внутри тела, а команду выхода связывайте с break.

Совет от нашей редакции: проверьте выход из цикла на граничных случаях. Для счетчика начните со значения на границе, для меню сразу введите команду выхода. Так вы заметите лишнюю итерацию или недостижимое завершение.

Комментарии

Оставьте свой комментарий
Сергей А.

Можно более доступно для нубов?