Цикл 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.print("finished!");
}
1
2
3
finished!

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

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

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

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

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

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

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

Задание

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

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


printNumbers(4);
// => 4
// => 3
// => 2
// => 1
// => finished!

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

Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь с помощью учётной записи GitHub, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт на GitHub.