break・continueの全体像

breakは繰返しから抜け、continueはその回の残りを省略します。似た位置に書けても、次に実行する場所が異なります。通常のJava 11のmain内の短いコードで移動先を追います。

この単元で学ぶこと

  • breakとcontinueの移動先を区別する
  • forの更新とwhileの条件への移動を追跡する
  • 入れ子の最も内側の反復を識別する

本文解説

二つの役割 for(int i=0;i<4;i++){if(i==2)break;System.out.print(i);}は01です。i=2でループ全体から抜けます。breakをcontinueへ変えると013です。continueはその回の表示を飛ばし、次の回へ進むためです。

位置が出力を変える System.out.print(i);if(i==2)break;という順なら012になります。分岐へ到達するより前に実行した表示を取り消す効果はありません。「何回繰り返すか」だけでなく、各文が分岐の前か後かを書き出します。

forの更新 for(int i=0;i<4;i++){if(i==2)continue;...}ではcontinueでもi++へ進み、次の条件を評価します。breakなら更新欄を通らずループ外へ移ります。外で宣言したiを後から表示すると、途中のbreakと自然終了の差が分かります。

whileで更新を置く場所 int i=0;while(i<3){i++;if(i==2)continue;System.out.print(i);}は13です。増分がcontinueより前なので進みます。増分をcontinueより後に置くと、条件が真のまま更新を飛ばし続ける場合があります。終了しない例は机上で移動先を確認してから直します。

入れ子では内側 for(int i=0;i<2;i++){for(int j=0;j<3;j++){if(j==1)break;System.out.print(i);}}は01です。ラベルのないbreakは最も内側のループからだけ抜けるので、外側は次のiへ進みます。ラベルのないcontinueも最も内側の反復を対象にします。

検索と集計の使い分け 配列から最初の負数を見つけたら検索を終える処理にはbreakを使えます。負数を集計対象から除き、残りを読み続けるならcontinueです。例えば{2,-1,4}で負数時にbreakして合計すると2、continueで飛ばして合計すると6です。

使える場所 breakはループやswitchから抜けるために使います。ラベルのないbreakをmainの最上位に単独で書くことはできません。continueは反復の継続が目的なので、反復の外では使えません。構文上のエラーと、合法だが意図した結果でないコードを分けます。

検証表 各回に「条件」「表示・加算」「分岐」「更新」「次の移動先」を記します。break/continueなし、最初で分岐、最後で分岐、分岐しない入力を用意します。入れ子ではiとjを別の列にし、内側を抜けた後に外側本体の残りが実行される点も確かめます。

図解

forの本体で分岐した後
分岐前に済ませた表示や加算は残る。

重要ポイント

  • breakは対象のループ等を終了する。
  • continueはその回の残りを飛ばす。
  • forのcontinueは更新欄を実行してから条件へ進む。
  • ラベルなしでは最も内側の対象へ作用する。

間違えやすい点

  • breakでメソッド全体が必ず終わると考えない。
  • continueが更新を常に省略すると考えない。
  • whileの更新を飛ばす経路を作らない。

用語解説

break
対象の反復やswitch等を抜ける文。
continue
対象の反復の次の回へ進む文。
入れ子
ある制御構造の本体に別の制御構造を置くこと。
更新欄
基本forの第三部分。次の条件判定より前に実行する。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。