Thinkers'Studio
JavaとC言語の自習ツール
break と continue を活用しよう( Java版 )

 forwhile は最初に、do-while は最後に、繰り返しを続けるかどうかの条件を判定します。
 場合によっては、繰り返しブロックの中で条件を判定し、 break文continue文 を呼び出す方が便利な場合があります。
 break はそこで繰り返しを抜ける指示、continue はそれより下に書いた処理をせずに次の繰り返しの先頭に進む指示です。

breakcontinue を使った例 】
 まず、下のプログラムを見てください。
 mangos配列に入っているマンゴーの重さを調べ、300g以上のものだけを 6個箱詰めするプログラムです。

class FruitShop {
    public static void main( String[] args ) {
        final int MINWEIGHT = 300;
        final int MAXCNT = 6;
        int i, cnt;
        int[] mangos = { 305, 310, 320, 297, 303, 305, 295, 301, 307, 298, 304 };

        System.out.println( "粒ぞろいのマンゴーを6個箱詰めします。" );
        cnt = 0;
        for( i = 0; i < mangos.length; i++ ) {
            if( mangos[i] < MINWEIGHT ) {
                System.out.println( mangos[i] + "g (小さいので入れません)" );
                continue;
            }
            System.out.println( mangos[i] + "gです --> 合計 " + ++cnt + "個" );
            if( cnt == MAXCNT ) break;
        }
        //System.out.println( "(繰り返し終了後) i = " + i );
    }
}
 小さ過ぎるものは箱に入れず、次の配列要素に移るために continue しています。
  cnt が 6個になったら break で繰り返しを抜けています。 実行結果は次の通りです。
粒ぞろいのマンゴーを6個箱詰めします。
305gです --> 合計 1個
310gです --> 合計 2個
320gです --> 合計 3個
297g (小さいので入れません)
303gです --> 合計 4個
305gです --> 合計 5個
295g (小さいので入れません)
301gです --> 合計 6個

(今回のクイズです)
 上のプログラムで、繰り返しを抜けた直後の i の値はどうなっているでしょう?
 最後の System.out.println のコメントを外して実行すると確かめられます。
   (答えは、次回の Java の Tips で ・・・)

 なお、for を下記のように書いて break を使わないことも可能です。
    for( i = 0; i < mangos.length && cnt < MAXCNT; i++ )
 しかし、上のプログラム例のようにした方が、ループを制御しているのが i であることが明確でシンプルです。
前回のクイズの答え: 演算の前も「違う」と表示される (前回の問題を見る
違う
(演算後)違う
new 演算子を使って Stringオブジェクトを作成すると、初期化に指定した文字列が全く同じでも、それぞれに場所が割り当てられてインスタンスが作られます。 str1 と str2 に代入された参照は異なるので、== で比較すると「違う」と表示されます。