こんにちは。今回はJavaの繰り返し処理の説明の記事です。今回の記事では、繰り返し処理の構文のうち、for文の説明を書きました。for文の基本的な使い方では、int型変数を使います。なので、最初にint型変数の説明を書きました。後半でfor文の使い方を書きました。配列を使った例も作りました。なお、この記事はJava初心者向けの記事です。
int型変数の簡単な説明
int型はプリミティブ型と呼ばれる型のひとつです。この型の変数は整数値を保持できます。
以下はint型の値を1加算する簡単な例です。
ソース
int i = 0; // (1)
System.out.println("変数iの値" + i);
i ++; // (2)
System.out.println("変数iの値" + i);
結果
変数iの値0
変数iの値1
(1)は変数宣言と初期化です。変数iをint型で宣言し、値0で初期化しています。
(2)の「++」はインクリメントと呼ばれる演算子です。変数の値を1加算します。この命令はfor文でよく使います。この記号は変数の右側に記述した場合と左側に記述した場合で処理順序が変わりますが、今回の記事では違いに影響はありません。
for文の書き方
以下はint型変数を使ったfor文の簡単な例です。
ソース
for (int i = 0; i < 3; i++) { // (1)
System.out.println(i); // (2)
}
結果
0
1
2
for文で繰り返し処理を記述することが可能であり、上記のような記述をします。
(2)では、for文で繰り返す処理を記述します。波括弧で囲まれた行に複数の命令文を記述することが出来ます。繰り返したい命令文が1行の場合、波括弧は省略可能です。その場合でも、可読性を考慮して波括弧は省略しないという方針もあります。
for文では(1)のように3つの命令文を括弧内に記述します。セミコロンで区切り、順番に以下を指定します。そして、波括弧の個所に繰り返し処理を記述します。以下のような形式です。
形式
for ([A]; [B]; [C])
[D]
}
Aの個所には、最初に実行する処理(サンプルではint i = 0
)を記述します。基本的な使い方では変数の初期化処理を記述します。なお、C言語にもfor文がありますが、この個所で変数宣言はできません。Aの個所に宣言した変数はfor文のブロック内で有効です。(サンプルの波括弧で囲まれた箇所です。)
Bの個所では、ブロック内の処理を実行するか判定する条件(サンプルではi < 3
)を記述します。基本的な使い方では、Aの個所で宣言した変数についての条件式を記述します。条件式の結果がtrueの場合、ブロック内の処理が実行されます。
今回、Bの個所ではi < 3
と記述しています。これは不等号を使った条件式の書き方のひとつです。左辺の値が右辺の値未満の場合、結果はtrueになります。trueというのはboolean型の値ですが、所見の場合は「数式が成り立つ」という理解で十分だと思います。
Cの個所では、Bの判定後に実行する処理(サンプルではi++
)を記述します。基本的な使い方では、Aの個所で宣言した変数の値を操作する命令を記述します。
上記サンプルでは、以下のように動作します。
命令文の |
内容 |
実行後の |
---|---|---|
A |
int型変数iが宣言され、値0で初期化される。 |
0 |
B |
条件式 結果はtrueなのでブロック内に処理が推移する。 |
0 |
D |
|
0 |
C |
|
1 |
B |
条件式 結果はtrueなのでブロック内に処理が推移する。 |
1 |
D |
|
1 |
C |
|
2 |
B |
条件式 結果はtrueなのでブロック内に処理が推移する。 |
2 |
D |
|
2 |
C |
|
3 |
B |
条件式 結果はfalseなので、ブロック内の処理は実行しない。 (ここでfor文全体の処理が終了となる。) |
3 |
このように、変数iの値が0,1,2の場合にfor文のブロック内の処理が実行されます。変数iの値が3の時は、条件式の結果がfalseであるので、ブロック内の処理を実行されません。そのため、繰り返しの回数は以下のように3回です。
i | 何回目か |
---|---|
0 | 1回目 |
1 | 2回目 |
2 | 3回目 |
上記の書き方は配列を使うときに便利です。配列の要素番号は0から始まるからです。
for文で配列を使った例
配列の全要素を順番に利用したい場合、for文を利用することが出来ます。配列の要素番号としてfor文の(繰り返しのための)変数を利用すると便利です。
例えば、以下はint型配列の合計を計算する例です。
配列を使った例
int[] points = { 51, 52, 53 };
int total = 0;
for (int i = 0; i < points.length; i++) {
total += points[i]; // (1)
}
System.out.println("total: " + total);
結果
total: 156
上記プログラムのfor文のpoints.length
は配列の長さです。[配列の変数名].lengthという記述で配列のサイズを取得できます。今回の場合、points.length
は数値3になります。
(1)の個所では配列の要素の指定に、変数iを指定しています。for文の書き方から、変数iは0から始まります。配列の要素番号も0から始まるので、このように書くことが出来ます。条件式がi < points.length
であり、値の処理がi++
であることから、変数iの値が0, 1, 2の場合、for文のブロック内の処理が実行されます。
なお、i < points.length
の個所では条件式を「<=」にした場合、以下のエラーが発生します。
- ArrayIndexOutOfBoundsException
配列の最後の要素番号は[配列の長さ – 1]であるためです。
以上、参考になれば幸いです。