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

Прерывание цикла

Открыта

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

Комментарии (516)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Alex
Уровень 4
15 октября, 11:31
боже мой, а не кажется, что это был сильный прыжок?
Anonymous #6463865
Уровень 12
25 апреля, 12:21
// ***********************************************************************************************
// Задача 4-4-2: Вывести на экран сумму чисел от 1 до 100 включительно, не кратных 3. Для этого
// используй цикл while. чтобы в цикле перейти к следующему числу, используй оператор continue.
int x = 0;
int y = 0;
while (x < 100) {
    x++;
    if (x % 3 == 0) {
        continue;
    }
    y += x;
}
System.out.print(y);
Anonymous #6463865
Уровень 12
25 апреля, 12:21
// Задача 4-4-1: Вводим данные с клавиатуры и сразу их выводим на экран, пока не будет введено слово "enough".
//Слово "enough" выводить не нужно. Для этого необходимо использовать бесконечный цикл (while(true)).
Scanner console = new Scanner(System.in);
while (true) {
    String text = console.nextLine();
    if (text.equals("enough")) {
        break;
    }
    System.out.println(text);
}
FromZeroToHero
Уровень 35
24 февраля, 13:34
Вариант 1
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }

   System.out.println(i);
   i++;
}
Вариант 2
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}
очень сложно... по-моему есть вариант полегче, без continue
int i = 1;
while (i <= 20)
{
   if ( (i % 7) != 0) System.out.println(i);
   i++;
}
Maria “ObniMashka”
Уровень 4
21 февраля, 13:51
Ох уж эти циклы ...😓 "Ничего не понятно, но очень интересно"😅
Vlad Lipski
Уровень 28
11 февраля, 07:52
тяжеловато чет(
Anna Klushkina
Уровень 2
3 января, 07:01
⛏ Идеальное соотношение задач к лекциям. В Java SELF чувствовала перегруженность однотипными задачками
Роман Зарубин
Уровень 13
25 ноября 2025, 16:56
Работаем
31 января, 10:24
я тоже пахаю
FosTeR
Уровень 51
5 октября 2025, 17:57
"«Не кратные 3» означает, что число нельзя поделить на 3 без остатка" то есть должно быть: if((a % 3) != 0) {...} а в итоге работает if((a % 3) == 0) {...} То есть получается, числа кратные 3.... Или я туплю?🤨
Arollu
Уровень 11
6 октября 2025, 18:50
Числа кратные трем: 3, 6, 9, 12, 15... В задаче нужна сумма чисел не кратных 3, то есть исключаем числа: 3, 6, 9, 12, 15... И получается что нам нужно найти сумму чисел на подобие: 1, 2, 4, 5, 7, 8, 10, 11, 13, 14...
28 сентября 2025, 12:23
Застрял на этой задание из-за некорректного условия. Привел скриншот