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 всередині циклу, поточний виток циклу завершиться достроково.

Одноразове виконання тіла циклу називають витком циклу. На відміну від команди break, команда continue перериває поточний виток циклу, але не сам цикл. Ця команда також коротка:

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, вона більше не змінюватиметься, і цикл буде виконуватися вічно.

Ми навмисно написали такий код, бо це дуже поширена помилка. Як же його виправити?

Тут можливі два варіанти:

Варіант 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);
}