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 |
|---|---|
|
|