W3docs

Цикл 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 должен иметь два компонента для завершения:

  1. Условие, которое может стать ложным. Константа true выполняется вечно.
  2. Нечто внутри тела, изменяющее условие. Если забыть обновить 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.

Разобранный пример

java— editable, runs on the server

Что дальше

Близкий родственник whileцикл do-while, который всегда выполняет тело хотя бы один раз.

Практика

Практика
Сколько раз этот цикл выполнит вывод? int i = 5; while (i < 5) { System.out.println(i); i++; }
Сколько раз этот цикл выполнит вывод? int i = 5; while (i < 5) { System.out.println(i); i++; }
Was this page helpful?