for文
まず最初のfor文について確認します。for文は指定した回数だけ処理を繰り返す時に使われます。書式は次の通りです。
for (初期化式; 条件式; 変化式){ 実行する文1; 実行する文2; ... }
for文では条件式を評価しtrueだった場合には「{」から「}」のブロック内に記述された文を実行します。条件式は関係演算子及び論理演算子などを使って記述します。(関係演算子及び論理演算子を参照して下さい)。
そしてブロック内の処理が一通り終わると改めて条件式を評価します。そしてまたtrueだった場合にはブロック内の文の実行し、falseだった場合にはfor文を終了します。
なお繰り返しで実行される文が一つだった場合には「{」と「}」を省略して次のように記述することもできます。
for (初期化式; 条件式; 変化式) 実行する文;
ではまず条件式だけを使ってfor文を記述してみます。次の例を見て下さい。
int sum = 0; int count = 0; for (; count < 2;){ sum += 2; count++; } System.out.println(sum);
この例では条件式「count < 2」がtrueとなる間繰り返し処理を実行します。繰り返し処理を1度実行するために条件を変化させなければ無限に繰り返しを行ってしまいますので今回の例では繰り返しの中で実行される文の一つとして変数「count」の値を1ずつ増加させています。
この例では次のように文が実行されていきます。
1)sum = 0; 2)count = 0; 3)条件式を評価。countは2よりも小さいので繰り返しを実行 4)sum += 2; 5)count++; 6)条件式を評価。countは2よりも小さいので繰り返しを実行 7)sum += 2; 8)count++; 9)条件式を評価。countは2よりも小さくないので繰り返しを終了 10)System.out.println(sum);
このようにfor文ではまず最初に条件式が評価されます。もしも条件式がいきなりfalseとなった場合には繰り返し処理は実行されません。条件式がtrueだった場合にはfor文の「{」から「}」までのブロック内の文を順に実行していきます。
ブロック内の最後の文を実行したら1回目の繰り返しが終了です。そしてfor文の最初に戻り改めて条件式を評価します。trueなら再度ブロック内の文を実行し、falseだった場合にはfor文の次の文へ処理が移ります。
for文はこのように条件式の評価とブロック内の処理の実行を繰り返す為のものです。
初期化式と変化式
for文では条件式の他に初期化式と変化式を記述することができます。
初期化式に記述した式はfor文で最初に条件式が評価される前に一度だけ実行されます。使い道としてはfor文の条件式で使用される変数の宣言と初期化に利用されることが多いです。for文の条件式で使用する回数をカウントするための変数について、最初の例では変数の宣言と初期化をfor文の外でで行っていましたが初期化式の箇所で記述することができます。
変化式は繰り返し処理が一度終わるたびに実行される式を記述します。主に条件式で使われている変数の値を変化させるための式を記述します。例えば条件式で使用している変数の値を1つ増加させるような式を記述します。
では先ほどの例を書き直してみます。
int sum = 0; for (int count = 0; count < 2; count++){ sum += 2; } System.out.println(sum);
先ほどと比べて、for文の条件式で使用する変数はfor文で宣言と初期化が行われており、また繰り返しが行われるたびに何をどう変化させるのかが変化式の箇所に書かれていて明確になっています。
では基本的な使い方をご紹介しておきます。n回繰り返し処理を行う場合は次のように記述します。
for (int i = 0; i < n; i++){ /* 実行する文 */ }
例えば3回繰り返す時は「n」のところに3と記述し、10回繰り返し場合は「n」のところに10と記述します。10回の場合で言えば変数「i」の値は0から9の間は繰り返しを実行し、10になった時には条件式がfalseとなりfor文が終了します。結果的に繰り返しは10回行われます。これは次のように記述しても同じです。
for (int i = 1; i <= n; i++){ /* 実行する文 */ }
この場合は変数「i」が1から10の間は繰り返しを実行し、11になった時に終了します。この場合でも繰り返しは10回実行されます。変数の値を条件式での評価だけではなく繰り返し処理の中で使用したい場合などには回数だけではなく、数値を何から何まで変化させて回数を計算するのかも考えなくてはなりません。
サンプル
では簡単な例で試しておきます。
class JSample2_1{ public static void main(String args[]){ int sum = 0; for (int i = 0; i < 10; i++){ sum += 2; } System.out.println(sum); } }
コンパイル後に実行すると次のように表示されます。
繰り返し処理は10回行われており、1回毎に数値に2を加算しているため結果は20となります。
( Written by Tatsuo Ikura )