Цикл for

Java Syntax Pro
4 уровень , 3 лекция
Открыта

1. Сравнение циклов: for vs while

Цикл while можно использовать во всех случаях, когда команду или группу команд нужно выполнить несколько раз. Но из всех случаев один случай стоит выделить особо.

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

Вроде бы все работает как надо, но не очень удобно. Перед циклом мы задаем стартовое значение переменной-счетчика, затем в условии проверяем, не достигла ли она уже финального значения. А вот меняем ее обычно в самом конце тела цикла.

А если тело цикла большое? Или у нас несколько вложенных циклов? В общем, хотелось бы в таких случаях собрать всю эту информацию о переменной-счетчике в одном месте. Так в Java появился цикл for. Выглядит он тоже не очень сложно:

for (команда1; условие; команда2)
{
   блок команд
}

Если у цикла while в круглых скобках было только условие, тут еще добавились две команды, разделенные точкой с запятой.

Все на самом деле проще, чем кажется: компилятор превращает цикл for в обычный цикл while таким образом:

команда1;
while (условие)
{
   блок команд
   команда2;
}

Или лучше продемонстрируем на примере: два примера ниже идентичны.

Вариант 1 Вариант 2
for (int i = 0; i < 20; i++)
{
 System.out.println(i);
}
int i = 0;
while (i < 20)
{
 System.out.println(i);
   i++;
}

Мы просто взяли и собрали в одном месте весь код, который касается переменной-счетчика — i.

команда1 в цикле for выполняется только один раз перед самим циклом (это видно на втором примере)

команда2 выполняется столько же раз, сколько и тело цикла, но будет выполняться каждый раз уже после того, как выполнится все тело цикла


2. Где используется цикл for

Цикл for, наверное, самый используемый вариант цикла в Java. Он применяется везде, т.к. это просто более понятная и удобная форма записи цикла while для программистов. Практически любой цикл while можно преобразовать в цикл for.

Примеры:

Цикл while Цикл for
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
for (int i = 3; i >= 0; i--)
{
   System.out.println(i);
}
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
for (int i = 0; i < 3; i++)
{
   System.out.println(i);
}
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
for (boolean isExit = false; !isExit; )
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
while (true)
   System.out.println("C");
for (; true; )
   System.out.println("C");
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}
for (; true; )
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}

Обратите внимание на последний пример. Там пропущены команды работы со счетчиком цикла. Нет счетчика — нет команд.

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.

Этот код зациклится Этот код будет отлично работать
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
   i++;
}
for (int i = 1; i <= 20; i++)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
}

Код с использованием цикла while работать не будет — i никогда не превысит 7. А вот код с циклом for отлично будет работать.



4. Сравнение циклов for: Java vs Pascal

В Паскале, кстати, тоже есть цикл For. Он вообще есть практически во всех языках программирования. Только в Паскале он гораздо понятнее. Примеры:

Pascal Java
For i := 1 to 10 do
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i++)
{
   System.out.println(i);
}
For i := 1 to 10 do step 2
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i = i + 2)
{
   System.out.println(i);
}
For i := 10 downto 0 do step 2
Begin
   Writeln(i);
End;
for (int i = 10; i >= 0; i = i - 2)
{
   System.out.println(i);
}


Комментарии (529)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Nemo Уровень 7
29 декабря 2025
for (int i = 1; i < end; i++) { if (i % multiple == 0) { sum += i; } else { continue; } }
Роман Зарубин Уровень 8
26 ноября 2025
Работаем !
Nik Уровень 10
21 ноября 2025
public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int start = scanner.nextInt(); int end = scanner.nextInt(); int multiple = scanner.nextInt(); int sum = 0; for(int i = start; i < end; i++){ if((sum + i) % multiple !=0 ){ continue; } else { sum = sum + i; } } около 5-6 часов потратил зато без подсказок и Гугла
MaryAm Уровень 5
23 декабря 2025

int sum = 0;
for (; start < end; start++) {
    if (start % multiple == 0) sum += start;
    else continue;
}
System.out.println(sum);
10 минут без подсказок и гугла, родной :)
Ultralyd Уровень 4
15 января 2026
continue не используется, несмотря на то что он в примере. выбираются только числа кратные multiple, нечего пропускать
Agurez Gaming Уровень 9
12 ноября 2025
Можно написать правильно, но..... Используйте continue и сломайте себе мозг, хотя можно и без него норм написать
Egalpra Уровень 9
10 ноября 2025
Сумма кратных чисел -> надо что-то поинтереснее придумать, потому что continue тут излишен и достаточно правильного if...
Сергей Уровень 10
29 сентября 2025
Вроде получается!😁🥳
Koyo Keyo Уровень 4
17 июля 2025
not good
motos Уровень 6
20 июня 2025
Иногда так хочется чтобы задачи щелкались как орешки... Задачу на нахождение суммы я решил так, скорее это список того что дописал: 1)Добавил еще 2 класса Scanner в программу и приклеил их к переменным end и multiple. 2) Объявил цикл for и внутри скобок: • Инициализоровал переменную i, которая равна start(ни в коем случае не нулю,так как нужно чтобы сумма считалась именно со start включительно) • Далее выражение, переменная i меньше end(это означает что цикл будет как раз выподнятся до второго введенного числа) • Инкременентирую переменную i, то есть i плюсик плюсик) 3) Пишу условие с помощью if-else: Если остаток деления(%) переменной i на переменную multiple равен нулю, то перемеменная sum равна sum плюс i Иначе continue 4) После блока кода цикла пишем готовую строку сисьтим аут принт элэн(sum) Готово!
Eugene Volkov Уровень 35
8 сентября 2025
Я решил счетчиком сделать само число start. Все же сумма считается по ходу самого цикла и нет смысла сохранять ему первоначальное значение. без i тоже хорошо сработало.
31 мая 2025
В этом уроке противоречие другому уроку о командах и выражениях. В этом уроке i++ называют командой, а в теме про команды и выражениея, i++ называют выражением, так это команда или выражение?
Dmitry Vedgun Уровень 1
19 августа 2025
Ты не на том заостряешь внимание, успех и правильность написания кода не зависит от того, как ты относишься к i++, как к выражению или как к команде)
Entropie Уровень 8
20 сентября 2025
Дословная цитата из того урока : "Все команды в Java делятся на две категории: команды (Statement) и выражения (Expression). " Т.е. выражение - это разновидность команды. Следовательно любое выражение можно назвать командой, но не любая команда является выражением.
Anonymous #3585174 Уровень 33
30 мая 2025
good