Фрагмент лекции JavaRush - университета.


— Привет, Амиго!

— Привет, Элли.

— Ты уже изучал циклы, и это круто.

— Согласен! Вообще теперь не понимаю, как без них обходиться.

— Иногда можно и без них… Но чаще всего не нужно. Сегодня же мы поговорим о ситуации, когда нужно выйти из цикла досрочно.

— То есть когда условие для продолжения цикла выполнено, но выйти нужно?

Именно! Иногда ты звучишь как готовый программист. Так вот, чтобы выйти из цикла досрочно, можно использовать команду 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.

— Пожалуй, запомню. Чувствую, что пригодится.

Фрагмент лекции JavaRush - университета.


Фрагмент лекции JavaRush - университета.


— Но break — не единственный оператор, который позволяет управлять поведением цикла. В Java еще один оператор — continue. Если выполнить команду continue внутри цикла, текущий виток цикла завершится досрочно.

— Что за виток такой?

— Виток цикла — это выполнение тела цикла один раз. Команда continue прерывает текущий виток цикла, но не сам цикл, в отличие от команды break. Команда тоже лаконична:

continue;

— Получается, оператор continue можно использовать в цикле, если мы хотим «пропускать» выполнение некоторых витков цикла?

— Именно так. Ты понял разницу между break и continue? Если тебе нужно найти среди неповторяющихся 20 чисел семёрку, какой цикл и прерывание ты применишь?

— Хм… Я пройдусь по всем числам, и если найду 7, то выполню break.

— А если тебе нужно вывести на экран числа от 1 до 20, и при этом пропустить числа, которые делятся на 7?

— Ну тут наверное continue, поскольку не нужно выходить из цикла, но я пока не совсем понял.

— Давай я покажу тебе, как решать такую задачку. Вот как мог бы выглядеть этот код.

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

— Почему ты на меня так подозрительно смотришь, Элли? Здесь есть какой-то подвох?

— Тебя не проведёшь, Амиго! На самом деле такой код корректно работать не будет. Он выведет первые 6 цифр, а потом 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);
}

— Отлично! Постараюсь не делать этой ошибки.

— Я запомню это твоё обещание!

undefined
4
Задача
Java Syntax Pro, 4 уровень, 9 лекция
Недоступна
Площадь круга
Для решения этой задачи нужно: 1. Ввести с клавиатуры положительное целое число radius. Это будет радиус окружности. 2. Вывести на экран площадь круга, рассчитанную по формуле: S = pi * radius * radius. Результатом должно стать целое число (тип int). Для этого нужно привести к типу int результат
undefined
4
Задача
Java Syntax Pro, 4 уровень, 9 лекция
Недоступна
Share a Coke
Давай разделим ящик колы на кабинет программистов. Для этого напишем программу, в которой: 1. Нужно ввести с клавиатуры два целых числа. Первое число - количество банок колы в ящике. Второе - количество людей в кабинете. 2. Вывести на экран результат деления первого числа на второе. Результатом долж