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 всередині циклу, поточний виток циклу завершиться достроково.

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

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, вона більше не змінюватиметься, і цикл буде виконуватися вічно.

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

Тут можливі два варіанти:

Варіант 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)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Василь Рівень 6
31 жовтня 2025
якщо хочемо 100 включно, то витоків має бути 101.
Stas Semenyuk_ЗСУ Рівень 18
16 січня 2025
Як вже говорилось не один раз - уважно читаємо умову. А потім перечитуємо. Всім успіхів.
Dmytrii Рівень 69
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 одно из условий. Думаю такое условие только для того, чтоб потренироваться решать задачи таким способом.
Dmytrii Рівень 69
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 більше