Бесплатный курс по java. Зарегистрируйтесь для отслеживания прогресса →

Java: Цикл While

Вкратце

while (условие) {
    // код, который будет повторяться
    // пока условие истинно
}

Компьютеры могут не уставая повторять действия десятки, сотни, тысячи раз. В программировании для повторений используются циклы.

Напишем метод с циклом, который будет выводить на экран числа от 1 до числа-аргумента:

public static void main(String[] args) {
    printNumbers(3);
}

static void printNumbers(int lastNumber) {
    var i = 1;

    while (i <= lastNumber) {
        System.out.println(i);
        i = i + 1;
    }
    System.out.println("finished!");
}
1
2
3
finished!

Конструкция while читается так: «делать то, что указано в теле цикла пока истинно условие (предикат) i <= lastNumber». При этом истинность условия проверяется перед каждым выполнением тела цикла, в том числе перед первым.

Цикл while состоит из трех элементов:

  • Ключевое слово while.
  • Предикат в скобках после while.
  • Блок кода в фигурных скобках (тело цикла).

Каждое выполнение тела называется итерацией. В нашем примере вызов printNumbers(3) породил три итерации, на каждой из которых была выведена на экран переменная i.

Самое главное в цикле — завершение (выход). Процесс, который порождает цикл, должен в конце концов остановиться, иначе цикл будет продолжаться бесконечно. Ответственность за остановку полностью лежит на программисте.

Часто обеспечение конечности цикла сводится к введению переменной, называемой «счётчик», во-первых потому, что так легко передать идею "повторить N раз", а во-вторых, в самом теле цикла может использоваться значение счетчика - как в нашем примере использовалось i для println. Сначала счетчик инициализируется, то есть ему задаётся начальное значение. В нашем примере это делает инструкция i = 1. Затем в условии цикла проверяется, не достиг ли счетчик своего предельного значения.

В нашем примере предельное значение определяется аргументом метода. Если условие цикла не выполнено, то тело не выполняется и интерпретатор двигается дальше, выполняя инструкции после цикла. Но если условие цикла истинно, то выполняется тело, в котором находится ключевой элемент остановки — изменение счетчика. Обычно его делают в конце тела. В нашем примере за изменение отвечает строчка i = i + 1.

Задание

Модифицируйте метод printNumbers() так, чтобы он выводил числа в обратном порядке. Для этого нужно идти от верхней границы к нижней. То есть, счётчик должен быть инициализирован максимальным значением, а в теле цикла его нужно уменьшать до нижней границы.

Пример вызова и вывода:

App.printNumbers(4);
4
3
2
1
finished!

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе