「こんにちは、アミーゴ!

「こんにちは、エリー」

「あなたはすでにループを勉強したことがあります、それは素晴らしいですね。」

「私もそう思います!今では、彼らなしではどうやって生きていけばいいのか全く分かりません。」

「時々、それらがなくても大丈夫です...しかし、より多くの場合、それらが必要になります。今日は、予定より早くループから抜け出す必要がある状況について話します。」

「ループを継続するための条件が満たされているが、それでもループを終了する必要がある場合のことですか?」

「その通りです! 時々、自分がすでにプログラマーであるように聞こえるかもしれません。とにかく、予定より早くループから抜け出すには、 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"

「もしかしたら、それを思い出すかもしれない。役に立つ気がする。」

「しかし、breakループの動作を制御できる唯一の Java ステートメントではありません。Java にもこのステートメントがあります。ループ内でステートメントをcontinue実行すると、ループの現在の反復が予定より早く終了します。」continue

「反復ってどういう意味ですか?」

「ループ反復は、ループ本体の 1 回の実行です。continueステートメントはループの現在の反復を中断しますが、breakステートメントとは異なり、ループ自体を終了しません。ステートメントも簡潔です:

continue;

「では、continueループの特定の反復の実行を「スキップ」したい場合、そのステートメントをループ内で使用できるということでしょうか?」

break「その通りです。と の違いを理解していますかcontinue? 20 個の繰り返しのない数字の中から 7 を見つける必要がある場合、どのようなループおよびループ中断ステートメントを使用しますか?

「うーん...すべての数字を調べて、7 が見つかったら、 を実行しますbreak。」

「?で割り切れる数値を除いて、1からまでの数値を表示する必要がある場合はどうすればよいですか?」207

continue「そうですね、ループから抜け出したくないので、ここではおそらく が必要です。でも、まだよくわかりません。」

「この問題を解決する方法を説明しましょう。このコードは次のようになります。」

コード 説明
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
プログラムは から1までの数字を表示します20。数値が で割り切れる場合7(割った余りが で7ある 0 )、数値の表示をスキップします。

「なぜそんなに怪訝な目で私を見るの、エリー?何か落とし穴はある?」

「だまされないよ、アミーゴ! 実際、このコードは正しく機能しません。最初の 6 桁が表示され、その後i永久に数字が表示されなくなります7。結局、このcontinueステートメントは他の 2 つのステートメントをスキップします:System.out.println(i)i++。その結果、値に達すると7、変数はi変更を停止し、無限ループに陥ることになります。私は、非常によくある間違いを説明するために、意図的にこのようにコードを書きました。」

「どうすれば直りますか?」

「ここには 2 つの選択肢があります:」

オプション 1:iを実行する前に変更しますcontinuei % 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);
}

「素晴らしいです!この間違いを犯さないように努めます。」

「約束は覚えてますよ!」