今回は配列とfor文について見て行きましょう。入門書では良く配列は箱(変数)の集まりですと説明します。次のようなイメージです。
この箱のなかに、整数であれば、例えば次のように値が入ることになります。このようなものを配列と呼びます。また各値のことを要素と呼びます。
配列は変数と同じように名前を付けて扱うことができます。
例えば、このmyArrという名前の配列の「8」が代入されているところは2箇所あります。初めの8を出力するには「どこ」という場所の情報が必要になります。Javaでは配列の要素にアクセスするために番号を使います。
番号は0から始まります。これら番号のことを添え字と呼びます。添字は0から始まり、要素の数-1で終わります。この場合は0-4の5つの要素があることになります。
それではこれらのイメージをJavaのコードで表現してみましょう。
配列を定義するには[]を利用します。変数と同様に型の宣言から始めます。
int myArr[];
これだけだと、次のように配列を宣言しただけなので、次のような状態です。
次に、配列の要素の数がいくつあるか定義します。
myArr = new int[5];
ここで、[5]は添字の意味ではなくて、要素の数が5つであることを示します。すると次のような状態になります。これを配列の初期化といいます。
配列の宣言と初期化は同時に記述することができます。
int myArr[] = new int[5];
作成した配列に値を代入するには、添字を利用して次のように記述します。
myArr[0] = 8;
myArr[1] = 4;
myArr[2] = 5;
myArr[3] = 8;
myArr[4] = 2;
もう少し簡単に宣言とともに値を代入することができます。
int myArr[] = {8,4,5,8,2};
値を取り出すには、次のように記述します。
System.out.println("配列0番目の値=" + myArr[0]);
配列のすべての値を取り出すには、for文を利用して次のように記述することができます。
for(int i=0; i<5; i++) {
System.out.println("配列" + i + "番目の値" + myArr[i]);
}
このとき、配列の要素の数をi<5のように記述するのですが、要素の数を間違えて、例えば6と記述すると、次のようにエラーとなってしまいます。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at HelloWorld.main(HelloWorld.java:11)
このような実行時に起きるエラーのことをJavaでは例外と呼びます。例外の詳細は別途話すとして、ここでは、次のことを確認しましょう。
- 例外名:ArrayIndexOutOfBoundsException
- 発生したファイルと行数:HelloWorld.java:11
このような間違いをなくすために配列では、要素の数を取得することができるようになっています。次のように「配列名.length」と記述します。
for(int i=0; i<myArr.length; i++) {
System.out.println("配列" + i + "番目の値" + myArr[i]);
}
Javaのバージョン5より配列などの値の集まりに対し、値すべてを走査する機能が追加されました。これを拡張for文と読みます。拡張for文を利用することで、値をすべて走査することができます。
for(int item : myArr) {
System.out.println(item);
}
ここでmyArrが走査対象の配列で、各配列の要素がitemに順次格納されて出力しています。itemは通常のfor文のときの、myArr[i]に相当します。itemは変数名なのでaでもxでも構いません。
拡張for文を利用することで、よりシンプルに配列の中身を取得することができるようになります。また拡張for文は配列だけでなく、さまざまな値の集まりに対して利用することが可能です。