Цикл for

Відкрита

1. Порівняння циклів for і 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 команди для ініціалізації лічильника та змінення лічильника. І навіть вираз-умову циклу можна не писати.


4
Задача
Java Syntax Zero,  4 рівень6 лекція
Недоступна
Парні числа
Парні числа

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
Задача
Java Syntax Zero,  4 рівень6 лекція
Недоступна
Сума кратних чисел
Сума кратних чисел

4. Порівняння циклів for: Java і Pascal

До речі, у мові Pascal теж є цикл For. Цей цикл взагалі є майже в усіх мовах програмування. Але в Pascal він набагато зрозуміліший. Приклади:

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);
}
Коментарі (31)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Владислав
Рівень 1
5 червня 2025, 16:51
Долго не мог понять почему код прерывался на 0. Делал сразу 2 условия в самоме цикле, но вывод был 0. Переделал на if и все получилось. Так понимаю в цикле нельзя использовать условные операторы. Но зашел в правильное решение а там начало вообще от 2 начинается, а не с 1.... И не понимаю почему i = i +2
Іван
Рівень 8
10 листопада 2024, 14:15
Все начебто зрозуміло з першого погляду, потім зануряєшся глибше і глибше-розумієш що - щось не зрозумів і починаєш з початку - замкнуте коло. Поки що я знайшов одне рішення, як вийти з замкнутого кола, це позитивно мислити ))! Бажаю усім - знайти вихід з замкнутого кола!
Olga
Рівень 5
26 листопада 2024, 13:22
Іване, дякую за розуміння того, що я не одна така))
Alexander Safronyuk
Рівень 5
10 серпня 2024, 11:56
Умову задачі взагалі не зрозумів. Доки не питався chat gpt, не зрозуміло було як це має на ділі працювати. Було б краще, якби ви добавили якийсь приклад роботи в описі завдання.
oncer
Рівень 7
Expert
25 липня 2024, 19:55
Ці задачі здалися мені набагало простішими, ніж з попереднього урока.
gummer Український ютубер в gummerGames
26 лютого 2024, 07:13
В принципі, якщо правильно побудувати останнє завдання, continue там зайвий (без continue код не проходить перевірку, і я лише дарма втратив спробу. Довелось дописати else{continue;} просто, аби код пройшов :C )
hidden #3421731
Рівень 28
10 березня 2024, 10:36
так можна і не дописувати
else{continue;}
можна зразу після
sum += start;
continue;
Євгеній
Рівень 14
Expert
12 травня 2023, 14:58
добре, що в курсі є порівняння з мовою Pascal, так я багато чого зрозумів, з того що раніше не піддавалося розумінню ))
20 квітня 2023, 20:19
//напишіть тут ваш код
      for(; start < end; start++)
      {
          if((start % multiple) == 0)
          sum = sum + start;
          continue;
      }
Vitalii Backend Developer
28 липня 2023, 13:42
хм... а нащо тут continue взагалі? цикл і без нього буде ітерувати далі))
Kolapsec Далекобійник - Маркетолог
26 листопада 2023, 13:30
!= 0 :)
Ledzen
Рівень 4
15 березня 2023, 11:14
Раніше якось міг додуматись до вирішення, зараз сиджу читаю умову і не розумію з чого починати писати програму :(
4 лютого 2023, 14:44
Підскажіть , для чого потрібно оголошувати (в останньому завданні) (int i = start;) , якщо START вже дорівнює 1 (так записано в Input data) ? Чому не можна просто використовувати start замість i ?
Василь
Рівень 10
Expert
23 березня 2023, 19:35
Не потрібно оголошувати, я використовував start і прийняло роботу.
les_yeux_blancs QA Automation Engineer
17 квітня 2023, 12:56
використовувати start то можна, але тільки якщо ти не проти того, що значення цього самого start буде змінюватись і в результаті стане рівним end тобто, якщо сильно захочеш вкінці зробити щось типу System.out.println("Numbers from " + start + " to " + end + ":"), то отримаєш "Numbers from 10 to 10:"
Volodymyr
Рівень 5
23 серпня 2022, 11:46
в другій задачі блок
if (i % multiple != 0) {
                continue;
            }
            sum = sum + i;
виглядає не дуже доречним, значно логічніше:
if (i % multiple = 0) {
                sum = sum + i;
            }
Bandiu Band
Рівень 25
6 вересня 2022, 21:20
Спочатку так і зробив, не замітив умову з continue
Roma Chernesh
Рівень 16
30 листопада 2022, 22:41
теж саме:) continue у данній конкретній задачі прям зовсім не в тему
theylovevalera Backend Developer в шукаю роботу
12 березня 2023, 20:27
Такий код не працюватиме,замість "= "там повинно бути "=="🙃
Євгеній
Рівень 14
Expert
12 травня 2023, 15:00
sum += i;
SeVans
Рівень 6
23 червня 2023, 09:26
if (i % multiple = 0) {
                sum = sum + i;
            }
тут буде помилка в умові, правильно:
if ((i % multiple) == 0) {
                sum += i;
            }