制御変数の値を判定して処理を繰り返し行いたい!
Java のループステートメントのひとつで、他のループ 文である while や
do 文と違い、ループ制御用変数を持っています。
これにより、1〜10 までの数値の合計を計算するような、数を増減させながらの処理が行いやすくなります。
for 文では「ループ制御変数」(またはカウンタ)の初期値、条件式、増分値をそれぞれ以下のように指定ます。
for( ループ制御変数の初期値 ; 条件式 ; ループ制御変数の増分値 ) { コードブロック; }
for 文の動作は以下のようになります。
ループ制御変数の初期値、条件式、ループ制御変数の増分値はすべて省略可能です。 なので、こんなふうにも記述することができます。
for( ; ; ) { コードブロック; }
この場合、コンパイラは常に真であるとみなすためコードブロックは実行され続けます。このように繰り返しが終了することなく実行され続けることを「無限ループ」といいます。
1 〜 10 の数字を足す処理を考えてみましょう。
int total = 0;
System.out.println("start");
for ( int i = 1; i <= 10; i = i + 1) {
total = total + i;
System.out.println("i = " + i + " , total = " + total);
}
System.out.println("end");
上記の処理結果は以下のようになります。
start i = 1 , total = 1 i = 2 , total = 3 i = 3 , total = 6 i = 4 , total = 10 i = 5 , total = 15 i = 6 , total = 21 i = 7 , total = 28 i = 8 , total = 36 i = 9 , total = 45 i = 10 , total = 55 end
条件式が最初から偽の場合
int total = 0; System.out.println("start"); for ( int i = 11; i <= 10; i = i + 1) { total = total + i; System.out.println("i = " + i + " , total = " + total); } System.out.println("end");
上記の処理結果は以下のようになります。
start end
こんなときは、「ループ制御変数」の定義は for 文の前でしておきます。
例えば、こんなふうに...。
int i = 0; int count = 0; String s = "abcdefg"; for ( i = 10; i > s.length(); i--) { count++; } System.out.println("s の文字数は " + i + " 文字です。"); System.out.println("コードブロックは " + count + " 回処理されました。");
上記の処理結果は以下のようになります。
s の文字数は 7 文字です。 コードブロックは 3 回処理されました。
こんなときは break 文を使用します。
break が検出されると、そこで繰り返しは終了され、制御はループの次のステートメントに移ります。
int count = 0; for ( int i = 1; i < 10; i++) { count = count + i; System.out.println("i は " + i + " です。count は " + count + " です。"); if (count > 20) { System.out.println("20 を超えたので処理を終わります。"); break; } }
上記の処理結果は以下のようになります。
i は 1 です。count は 1 です。 i は 2 です。count は 3 です。 i は 3 です。count は 6 です。 i は 4 です。count は 10 です。 i は 5 です。count は 15 です。 i は 6 です。count は 21 です。 20 を超えたので処理を終わります。
また、もし二重ループの中に break 文があった場合は、break は内側のループだけを終了させるので、注意してください。
for ( int i = 1; i <= 5; i++) { System.out.println(i + " start :"); for ( int j = 1; j < 10; j++) { System.out.print(" " + j); if (i == j) { System.out.print(" : end"); break; } } }
上記の処理結果は以下のようになります。
1 start : 1 : end 2 start : 1 2 : end 3 start : 1 2 3 : end 4 start : 1 2 3 4 : end 5 start : 1 2 3 4 5 : end
こんなときは continue 文を使用します。
continue 文が検出されると、そこでコードブロックの処理を中断し、for 文の先頭に制御が移ります。そして、ループ制御変数の増分、条件式の判定が行われます。break
文のようにループを抜けてしまうわけではないので注意してください。
for ( int i = 1; i < 5; i++) { if (i == 3) { continue; } System.out.println(i); }
上記の処理結果は以下のようになります。
1 2 4