JavaRush /Курси /Java Syntax Zero /Переривання циклу

Переривання циклу

Java Syntax Zero
Рівень 4 , Лекція 4
Відкрита

1. Команда break

Давайте розберемо приклад з попереднього уроку:

Код Пояснення
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Програма буде зчитувати рядки з клавіатури, поки не буде введено рядок exit.

Програма читає з консолі рядки, поки не буде введено слово exit. Якщо ввести це слово, змінна isExit стане true, а умова циклу !isExit прийме значення false, і цикл завершиться.

У Java є спеціальний оператор break, який дозволяє спростити написання такої логіки. Якщо виконати команду break всередині циклу, він негайно завершиться: програма почне виконувати команди, які йдуть після циклу. Команда дуже лаконічна:

break;

Ось як можна переписати щойно розглянутий приклад із використанням break:

Код Пояснення
Scanner console = new Scanner(System.in);
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}
Програма буде зчитувати рядки з клавіатури, поки не буде введено рядок exit.


2. Команда continue

Але break — не єдиний оператор, який дозволяє керувати поведінкою циклу. У Java є ще один оператор — continue. Якщо виконати команду continue всередині циклу, поточна ітерація циклу завершиться достроково.

Виконання тіла циклу один раз називається ітерацією. Команда continue перериває поточну ітерацію циклу, але не сам цикл, на відміну від команди break. Команда теж лаконічна:

continue;

Цей оператор continue дуже зручно використовувати в циклі, якщо ми хочемо «пропускати» виконання тіла циклу для деяких ситуацій.

Задача: ми хочемо написати програму, яка виводить на екран 20 чисел від 1 до 20, і при цьому пропускає числа, які діляться на 7. Ось як міг би виглядати цей код:

Код Пояснення
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
Програма виводить на екран числа з 1 по 20. Якщо число ділиться на 7 (остача від ділення на 7 дорівнює 0), вивід на екран пропускається.

Насправді такий код працювати не буде, тому що i назавжди застрягне на цифрі 7. Адже виклик continue призвів до того, що пропустилися дві команди — System.out.println(i) і i++. Тому, досягнувши значення 7, змінна i перестане змінюватися, і цикл виконуватиметься вічно.

Ми спеціально написали такий код, оскільки це дуже поширена помилка. Як же його виправити?

Тут є два варіанти:

Варіант 1: змінити i перед викликом continue, але після виклику i % 7

Варіант 2: збільшувати i завжди на початку циклу. Але тоді стартове значення i має бути 0.

Варіант 1 Варіант 2
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }
   
   System.out.println(i);
   i++;
}
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}

Коментарі (21)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Василь Рівень 4
31 жовтня 2025
якщо хочемо 100 включно, то витоків має бути 101.
Stas Semenyuk_ЗСУ Рівень 18
16 січня 2025
Як вже говорилось не один раз - уважно читаємо умову. А потім перечитуємо. Всім успіхів.
Dmytro Рівень 26
2 червня 2024
зачем тут continue? создаем вайл, проферяем ифом числа, которые делятся без остатка и записываем их в сумму. все!

int i = 100;
int sum = 0;
   while (i > 0) {
      if (i % 3 != 0) {
      sum += i;
      }
   i--;
}
System.out.println(sum);
Anna Рівень 111
7 червня 2024
Вариантов решения может быть много. В этой задаче использовать continue одно из условий. Думаю такое условие только для того, чтоб потренироваться решать задачи таким способом.
Dmytro Рівень 26
7 червня 2024
оно то да, но по факту оно лишнее)
29 жовтня 2023
this exercise works the same without continue
Ігор Рівень 41 Expert
26 квітня 2023
остання задача, з третьої спроби, ААААААА ДЕБАГ ВСЬОМУ ГОЛОВА
Valerii Рівень 33 Expert
20 березня 2023
Всім привіт,це обчислення дорівнює 3367. Допомогає зрозуміти логіку виконання програми(уважне преречитування тз та лекціі),та використання Debagger) Good luck and don't give up
Ihor Bodnar Рівень 6
11 грудня 2022
я не зрозумів, якщо 1 і 100 включно, то хіба її не потрібно сумувати?
Anonymous #3312433 Рівень 5
27 вересня 2023
Потрібно. Чому ви подумали, що не потрібно?
Roma Chernesh Рівень 16
30 листопада 2022
цікава друга задача! Не складна, але потребує уваги до декількох деталей
Volodymyr Рівень 5
23 серпня 2022
для накопичення результату, як на мене краще використовувати не

sum = sum + number;
а

sum += number;
theylovevalera Рівень 51
12 березня 2023
можна і так і так,другий варіант просто швидше написати)
Гаркін Рівень 14
9 лютого 2024
А ще додаткове тренування у написанні комбінованих операцій.
WhoAMI Рівень 51
12 серпня 2022
на забувайте виконувати усі умови задачі, бо інколи пропускаєш і профукав спробу на здачу. відповідь "3367". усім успіхів у навчанні
Ihor Bodnar Рівень 6
11 грудня 2022
якби не ваша підказка, я б так і не зрозумів, що не так, оскільки додав на 101 більше