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

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

Відкрита

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.

4
Задача
Java Syntax Zero,  4 рівень4 лекція
Недоступна
Показуємо, що отримуємо
Вводимо дані з клавіатури й одразу виводимо їх на екран, доки не буде введено слово "enough". Слово "enough" виводити не потрібно. Для цього потрібно використовувати нескінченний цикл (while(true)). Підказка: щоб завершити нескінченний цикл, використай оператор break.

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);
}

4
Задача
Java Syntax Zero,  4 рівень4 лекція
Недоступна
Сума чисел, не кратних 3
Вивести на екран суму чисел від1 до 100 включно, які не кратні 3. Використай для цього цикл while. Підказка: для переходу в циклі до наступного числа використовуй оператор continue.
Коментарі (21)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Василь trainee в Kindgeek
31 жовтня 2025, 15:46
якщо хочемо 100 включно, то витоків має бути 101.
Stas Semenyuk_ЗСУ
Рівень 18
16 січня 2025, 13:08
Як вже говорилось не один раз - уважно читаємо умову. А потім перечитуємо. Всім успіхів.
Dmytro
Рівень 26
2 червня 2024, 14:40
зачем тут 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, 08:36
Вариантов решения может быть много. В этой задаче использовать continue одно из условий. Думаю такое условие только для того, чтоб потренироваться решать задачи таким способом.
Dmytro
Рівень 26
7 червня 2024, 09:49
оно то да, но по факту оно лишнее)
29 жовтня 2023, 20:57
this exercise works the same without continue
Ігор
Рівень 41
Expert
26 квітня 2023, 10:08
остання задача, з третьої спроби, ААААААА ДЕБАГ ВСЬОМУ ГОЛОВА
Valerii
Рівень 33
Expert
20 березня 2023, 12:57
Всім привіт,це обчислення дорівнює 3367. Допомогає зрозуміти логіку виконання програми(уважне преречитування тз та лекціі),та використання Debagger) Good luck and don't give up
Ihor Bodnar
Рівень 6
11 грудня 2022, 21:45
я не зрозумів, якщо 1 і 100 включно, то хіба її не потрібно сумувати?
Anonymous #3312433
Рівень 5
27 вересня 2023, 17:02
Потрібно. Чому ви подумали, що не потрібно?
Roma Chernesh
Рівень 16
30 листопада 2022, 18:21
цікава друга задача! Не складна, але потребує уваги до декількох деталей
Volodymyr
Рівень 5
23 серпня 2022, 09:24
для накопичення результату, як на мене краще використовувати не
sum = sum + number;
а
sum += number;
theylovevalera Backend Developer в шукаю роботу
12 березня 2023, 20:12
можна і так і так,другий варіант просто швидше написати)
Гаркін
Рівень 14
9 лютого 2024, 18:31
А ще додаткове тренування у написанні комбінованих операцій.
WhoAMI
Рівень 51
12 серпня 2022, 06:56
на забувайте виконувати усі умови задачі, бо інколи пропускаєш і профукав спробу на здачу. відповідь "3367". усім успіхів у навчанні
Ihor Bodnar
Рівень 6
11 грудня 2022, 21:44
якби не ваша підказка, я б так і не зрозумів, що не так, оскільки додав на 101 більше