一次元配列

変数には一つの値しか記憶できませんでした。プログラムで関連のある複数のデータをまとめて扱いたいときには変数では不便です。たとえば、入力した複数のデータを繰り返して利用したいときなど。

このようなときに利用するのが配列です。配列のイメージを次の図に示します。

配列は図のように値を記憶する場所が連続していて、すべての場所の共通の名前が付いています。それぞれの場所を利用するには場所を示す番号を使います。

配列の宣言

配列を利用するには変数の場合と同じように宣言が必要です。配列の宣言は次の表に表現します。

型名 配列名[];

たとえば、int型の配列InputDataを使いたいときは次のように表現します。

int InputData[];

これで配列の宣言できましたが、このままでは実際の配列領域がメモリに確保されないのでnew演算子を使って必要な配列の領域を確保します。次のように表現します。

配列名 = new 型名[配列の大きさを示す数値];

たとえば、先ほどの配列InputDataに10個の記憶領域を割り当てるには次のように表現します。

InputData = new int[10];

配列の宣言と記憶領域の割り当てはまとめて表現できます。次のように表現します。

型名 配列名[] = new 型名[配列の大きさを示す数値];

これの方法を利用すれば先ほどの配列InputDataの宣言は次のように表現できます。

int InputData[] = new int[10];

配列を宣言するときに値を代入することができます。このときはnew演算子は不要になります。次のように表現します。

型名 配列名[] = {値1、値2、・・・・値n};

たとえば、int型の配列Aの初期値を1、2、3、4、5、6、7、8、9、10にしたいときは次のように表現します。

int A[] = {1,2,3,4,5,6,7,8,9,10};

配列へアクセス

配列に値を代入したり、記憶している値を利用するときは変数とほぼ同じ要領で使用できます。変数と異なるのは配列のどの場所かを指定するということです。

たとえば、次のように宣言された配列Dには10個の記憶領域があります。

int D[] = new int[10];

それぞれの記憶場所を示す番号は0から9までとなります。配列の一つ一つの要素は配列名とこの番号を組み合わせ、次のように表現します。

D[0]、D[1]、D[2]、D[3]、D[4]、D[5]、D[6]、D[7]、D[8]、D[9]

配列へ値を代入するには変数と同じように表現します。たとえば、D[5]に値10を代入するときは次のように表現します。

D[5] = 10;

また、配列の値を変数などに代入するときも同じ要領です。

I = D[5];

配列のすべての要素を同じ値にしたいときはforループを用います。たとえば、要素を100個持つ配列DDDの値をすべて0にしたければ次のように表現します。

int i;
int DDD[] = new int[100];
for (i = 0; i <= 99; i++) DDD[i] = 0;

この例で示したとおり、配列はループを使ってまとめてアクセスできる利点を持っています。

二次元配列

表のような形でデータを記憶できる配列を二次元配列といいます。

たとえば、2行3列の配列Aのイメージは次のようになります。

A[0][0]
A[0][1]
A[0][2]
A[1][0]
A[1][1]
A[1][2]

二次元配列の宣言は次のように表現します。

型名 配列名[][];

領域確保を含めると次のようになります。

型名 配列名[][] = new 型名[行数][列数];

初期化しての宣言は次のようになります。

型名 配列名[][] = { {値1、値2、・・・、値n}、{値1、値2、・・・、値n}、・・}

たとえば、2行3列の配列XXXの初期値を1行目に10、20、30、2行目に100、200、300とするときの宣言は次のようになります。

int XXX[][] = { {10, 20, 30}, {100, 200, 300}};