1. Сравнение циклов: for
vs while
Цикл while
можно использовать во всех случаях, когда команду или группу команд нужно выполнить несколько раз. Но из всех случаев один случай стоит выделить особо.
Это случай, когда программист (автор программы) заранее знает, сколько раз должен выполниться его цикл. Обычно это решается введением специальной переменной-счетчика, и каждую итерацию цикла переменная увеличивается (или уменьшается) на 1
.
Вроде бы все работает как надо, но не очень удобно. Перед циклом мы задаем стартовое значение переменной-счетчика, затем в условии проверяем, не достигла ли она уже финального значения. А вот меняем ее обычно в самом конце тела цикла.
А если тело цикла большое? Или у нас несколько вложенных циклов? В общем, хотелось бы в таких случаях собрать всю эту информацию о переменной-счетчике в одном месте. Так в Java появился цикл for
. Выглядит он тоже не очень сложно:
for (команда1; условие; команда2)
{
блок команд
}
Если у цикла while
в круглых скобках было только условие, тут еще добавились две команды, разделенные точкой с запятой.
Все на самом деле проще, чем кажется: компилятор превращает цикл for
в обычный цикл while
таким образом:
команда1;
while (условие)
{
блок команд
команда2;
}
Или лучше продемонстрируем на примере: два примера ниже идентичны.
Вариант 1 | Вариант 2 |
---|---|
|
|
Мы просто взяли и собрали в одном месте весь код, который касается переменной-счетчика — i
.
команда1 в цикле for
выполняется только один раз перед самим циклом (это видно на втором примере)
команда2 выполняется столько же раз, сколько и тело цикла, но будет выполняться каждый раз уже после того, как выполнится все тело цикла
2. Где используется цикл for
Цикл for
, наверное, самый используемый вариант цикла в Java. Он применяется везде, т.к. это просто более понятная и удобная форма записи цикла while
для программистов. Практически любой цикл while
можно преобразовать в цикл for
.
Примеры:
Цикл while | Цикл for |
---|---|
|
|
|
|
|
|
|
|
|
|
Обратите внимание на последний пример. Там пропущены команды работы со счетчиком цикла. Нет счетчика — нет команд.
Java разрешает не писать в цикле for
«команду по инициализации счетчика» и «команду по изменению счетчика». И даже выражение-условие цикла можно не писать.
3. Нюансы использования цикла for
Важный момент по использованию цикла for
и операторов break
и continue
.
Оператор break
в цикле for
работает так же, как и в цикле while
— приводит к немедленному завершению цикла. А вот continue
приводит к пропуску тела цикла, но не команды2
(которая меняет счетчик цикла).
Давайте еще раз посмотрим, как связаны for
и while
.
for (команда1; условие; команда2)
{
блок команд
}
команда1;
while (условие)
{
блок команд
команда2;
}
Если в блоке команд цикла for
вызвать оператор continue
, остаток блока команд будет пропущен, а вот команда2 (которая работает с переменной-счетчиком цикла for
) все равно выполнится.
Вернемся к нашему примеру с пропуском чисел, которые делятся на 7.
Этот код зациклится | Этот код будет отлично работать |
---|---|
|
|
Код с использованием цикла while
работать не будет — i никогда не превысит 7. А вот код с циклом for
отлично будет работать.
4. Сравнение циклов for: Java vs Pascal
В Паскале, кстати, тоже есть цикл For
. Он вообще есть практически во всех языках программирования. Только в Паскале он гораздо понятнее. Примеры:
Pascal | Java |
---|---|
|
|
|
|
|
|
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ