Цикл while в Java
Повторяйте код в Java с помощью цикла while: проверка условия и бесконечные циклы.
Цикл while — простейший способ повторить блок кода в Java. Пока его условие равно true, тело выполняется снова. Когда условие становится false, цикл завершается и выполнение продолжается после него.
Синтаксис
while (condition) {
// body — runs while condition is true
}Минимальный пример — счёт от 1 до 5:
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}Условие i <= 5 проверяется перед каждой итерацией. Когда i становится равным 6, условие ложно и цикл заканчивается.
Два важных момента
Каждый цикл while должен иметь два компонента для завершения:
- Условие, которое может стать ложным. Константа
trueвыполняется вечно. - Нечто внутри тела, изменяющее условие. Если забыть обновить
i, цикл станет бесконечным.
Типичная ошибка начинающих:
int i = 1;
while (i <= 5) {
System.out.println(i);
// forgot i++ — loop runs forever
}Если программа зависает, ищите ошибку здесь. Нажатие Ctrl+C в терминале останавливает зависшую программу.
Ещё одна классическая ошибка — неправильный оператор сравнения. while (i <= 5) при начальном значении i = 1 выполняется пять раз; while (i < 5) — только четыре. Решите заранее, должно ли граничное значение быть включено, прежде чем писать условие.
Условие проверяется сначала
Если условие с самого начала ложно, тело не выполняется ни разу:
int i = 10;
while (i < 5) {
System.out.println(i); // never executes
}Это ключевое отличие от цикла do/while, который всегда выполняет тело хотя бы один раз.
Когда использовать while
Цикл for лучше подходит, когда количество итераций известно заранее (for (int i = 0; i < 10; i++)). Цикл while лучше, когда условие остановки не связано со счётчиком — оно зависит от изменения состояния, и заранее неизвестно, сколько итераций потребуется.
Чтение до конца ввода:
import java.util.Scanner;
Scanner s = new Scanner(System.in);
while (s.hasNextLine()) {
String line = s.nextLine();
System.out.println("got: " + line);
}Повтор до успеха:
boolean connected = false;
int attempts = 0;
while (!connected && attempts < 5) {
connected = tryConnect();
attempts++;
}Обработка очереди:
while (!queue.isEmpty()) {
Task t = queue.poll();
t.run();
}Намеренные бесконечные циклы
Иногда нужно, чтобы цикл выполнялся вечно — как правило, в циклах событий, серверах или симуляциях — и для выхода используется break:
while (true) {
String input = readCommand();
if (input.equals("quit")) {
break;
}
handle(input);
}while (true) более идиоматичен, чем while (1 == 1) или другие варианты.
Использование break и continue
Внутри любого цикла можно использовать:
break— полностью выйти из циклаcontinue— пропустить остаток текущей итерации и повторно проверить условие
Оба оператора подробно рассматриваются в разделах break и continue.
Разобранный пример
Что дальше
Близкий родственник while — цикл do-while, который всегда выполняет тело хотя бы один раз.