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、ループ条件は となり、ループが終了します。」!isExitfalse

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 ステートメントはこれだけではありません。Java にもこのcontinueステートメントがあります。continueループ内でステートメントを実行すると、ループの現在の反復が予定より早く終了します。

ループ本体を 1 回実行することをループの反復と呼びます。このcontinueステートメントはループの現在の反復を中断しますが、breakステートメントとは異なり、ループ自体は終了しません。声明も簡潔に述べている:

continue;

このcontinueステートメントは、ループ内で特定の状況でループ本体の実行を「スキップ」したい場合に非常に便利です。

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ステートメントは他の 2 つのステートメント (System.out.println(i)と )をスキップしますi++。その結果、 value に到達すると7、変数はi変更を停止し、無限ループに陥ります。

この非常によくある間違いを説明するために、意図的にこのようにコードを作成しました。どうすれば修正できますか?

ここには 2 つのオプションがあります。

オプション 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);
}