Okapi Project

for 文 (ふぉーぶん)

バージョン
2003 年 06 月 30 日 Ver.1.1
作成者
K.Takimoto ( Xware )

目的

制御変数の値を判定して処理を繰り返し行いたい!

for 文ってなに?

Java のループステートメントのひとつで、他のループ 文である while や do 文と違い、ループ制御用変数を持っています
これにより、1〜10 までの数値の合計を計算するような、数を増減させながらの処理が行いやすくなります。

for 文の説明

for 文では「ループ制御変数」(またはカウンタ)の初期値、条件式、増分値をそれぞれ以下のように指定ます。

 for( ループ制御変数の初期値 ; 条件式 ; ループ制御変数の増分値 ) {
   コードブロック;
 }
ループ制御変数の初期値 [ 省略可 ]
ループ制御変数の定義および初期値の代入式を記述します。
条件式 [省略可]
ループするコードブロックを処理する条件を記述します。この条件が満たされてるあいだ、for 文はコードブロックを繰り返し処理します。
ループ制御変数の増分地 [ 省略可 ]
ループカウンタの増減を行うための式を記載します。

for 文の動作は以下のようになります。

  1. ループ制御変数に初期値を代入します。
  2. 条件式を判定します。
  3. 条件式が偽であれば、ループを抜けます。
  4. 条件式が真であれば、繰り返し対象の処理を行います。
  5. ループ制御変数に増分値を足します。
  6. 2〜5.を繰り返します。

ループ制御変数の初期値、条件式、ループ制御変数の増分値はすべて省略可能です。 なので、こんなふうにも記述することができます。

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 文の外で使いたい!

こんなときは、「ループ制御変数」の定義は 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

関連


Copyright © 2003 - 2006 Okapi Project All Rights Reserved.