1. Команда break
Давайте разберем пример из предыдущего урока:
Код | Пояснение |
---|---|
|
Программа будет считывать строки с клавиатуры, пока не будет введена строка exit . |
Программа читает с консоли строки, пока не будет введено слово exit
. Если ввести это слово, переменная isExit
станет true
, а условие цикла !isExit
примет значение false
, и цикл завершится.
В Java есть специальный оператор break
, который позволяет упростить написание такой логики. Если выполнить команду break
внутри цикла, он немедленно завершается: программа начнет выполнять команды, которые идут после цикла. Команда очень лаконична:
break;
Вот как можно переписать только что разобранный пример с использованием break
:
Код | Пояснение |
---|---|
|
Программа будет считывать строки с клавиатуры, пока не будет введена строка exit . |
2. Команда continue
Но break
— не единственный оператор, который позволяет управлять поведением цикла. В Java еще один оператор — continue
. Если выполнить команду continue
внутри цикла, текущий виток цикла завершится досрочно.
Выполнение тела цикла один раз называется витком цикла. Команда continue
прерывает текущий виток цикла, но не сам цикл, в отличие от команды break
. Команда тоже лаконична:
continue;
Этот оператор continue
очень удобно использовать в цикле, если мы хотим «пропускать» выполнение тела цикла для некоторых ситуаций.
Задача: мы хотим написать программу, которая выводит на экран 20
чисел от 1
до 20
, и при этом пропускает числа, которые делятся на 7
. Вот как мог бы выглядеть этот код:
Код | Пояснение |
---|---|
|
Программа выводит на экран числа с 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 |
---|---|
|
|