Фрагмент лекции JavaRush - университета.
— Привет, Амиго!
— Привет, Элли.
— Ты уже изучал циклы, и это круто.
— Согласен! Вообще теперь не понимаю, как без них обходиться.
— Иногда можно и без них… Но чаще всего не нужно. Сегодня же мы поговорим о ситуации, когда нужно выйти из цикла досрочно.
— То есть когда условие для продолжения цикла выполнено, но выйти нужно?
Именно! Иногда ты звучишь как готовый программист. Так вот, чтобы выйти из цикла досрочно, можно использовать команду break. Посмотри на следующий пример:
Код | Пояснение |
---|---|
|
Программа будет считывать строки с клавиатуры, пока не будет введена строка exit . |
— Вижу. Программа считывает строки с консоли. Если ввести строку exit
, переменная isExit
станет true
, а условие цикла !isExit
примет значение false
, и цикл завершится.
— Всё верно. Так вот, в Java есть специальный оператор break
, который позволяет упростить написание такой логики. Если выполнить команду break
внутри цикла, он немедленно завершается: программа начнет выполнять команды, которые идут после цикла. Команда очень лаконична:
break;
— Вот как можно переписать только что разобранный пример с использованием break
:
Код | Пояснение |
---|---|
|
Программа будет считывать строки с клавиатуры, пока не будет введена строка exit . |
— Пожалуй, запомню. Чувствую, что пригодится.
Фрагмент лекции JavaRush - университета.
Фрагмент лекции JavaRush - университета.
— Но break
— не единственный оператор, который позволяет управлять поведением цикла. В Java еще один оператор — continue
. Если выполнить команду continue
внутри цикла, текущий виток цикла завершится досрочно.
— Что за виток такой?
— Виток цикла — это выполнение тела цикла один раз. Команда continue
прерывает текущий виток цикла, но не сам цикл, в отличие от команды break
. Команда тоже лаконична:
continue;
— Получается, оператор continue
можно использовать в цикле, если мы хотим «пропускать» выполнение некоторых витков цикла?
— Именно так. Ты понял разницу между break
и continue
? Если тебе нужно найти среди неповторяющихся 20 чисел семёрку, какой цикл и прерывание ты применишь?
— Хм… Я пройдусь по всем числам, и если найду 7, то выполню break
.
— А если тебе нужно вывести на экран числа от 1
до 20
, и при этом пропустить числа, которые делятся на 7
?
— Ну тут наверное continue
, поскольку не нужно выходить из цикла, но я пока не совсем понял.
— Давай я покажу тебе, как решать такую задачку. Вот как мог бы выглядеть этот код.
Код | Пояснение |
---|---|
|
Программа выводит на экран числа с 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 |
---|---|
|
|
— Отлично! Постараюсь не делать этой ошибки.
— Я запомню это твоё обещание!