for と while は最初に、do-while は最後に、繰り返しを続けるかどうかの条件を判定します。
場合によっては、繰り返しブロックの中で条件を判定し、 break文 や continue文 を呼び出す方が便利な場合があります。
break はそこで繰り返しを抜ける指示、continue はそれより下に書いた処理をせずに次の繰り返しの先頭に進む指示です。
【 break と continue を使った例 】
まず、下のプログラムを見てください。
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 しています。
粒ぞろいのマンゴーを6個箱詰めします。 305gです --> 合計 1個 310gです --> 合計 2個 320gです --> 合計 3個 297g (小さいので入れません) 303gです --> 合計 4個 305gです --> 合計 5個 295g (小さいので入れません) 301gです --> 合計 6個
(今回のクイズです)
上のプログラムで、繰り返しを抜けた直後の i の値はどうなっているでしょう?
最後の System.out.println のコメントを外して実行すると確かめられます。
(答えは、次回の Java の Tips で ・・・)
for( i = 0; i < mangos.length && cnt < MAXCNT; i++ )しかし、上のプログラム例のようにした方が、ループを制御しているのが i であることが明確でシンプルです。
違う
(演算後)違う
new 演算子を使って Stringオブジェクトを作成すると、初期化に指定した文字列が全く同じでも、それぞれに場所が割り当てられてインスタンスが作られます。
str1 と str2 に代入された参照は異なるので、== で比較すると「違う」と表示されます。