配列は通常の一次元だけではなく、二次元、三次元などの多次元の配列も作ることができる。
このページではJavaの二次元配列の使い方についてお伝えする。
目次
Javaの二次元配列
二次元配列では、通常の一次元配列に次元がもうひとつ加わる。一次元が直線ならば、二次元は平面である。縦方向の並びに横方向の並びが加わる。
次元というとわかりにくいかもしれないが、部屋番号くらいで考えると二次元行列はわかりやすいだろう。
平屋であったら部屋番号だけでわかる。これが通常の行列だ。
何階もあるマンションであれば4Fの2部屋目という形で、「4F」「2部屋目」というように場所を特定するための要素が二つになる。これが二次元配列になる。
二次元の配列変数から値を取り出すためには、縦方向と横方向のふたつのインデックスで引き出す。
二次元配列を扱うための準備
二次元の配列を使うためには、その準備として配列を宣言し配列を生成する必要がある。これは、通常の配列と同じである。
宣言
二次元配列変数の宣言は、配列の型と次元がふたつあることを宣言する。変数の型の後に[]をふたつ書けば二次元配列になる。
その書き方の基本は簡単だ。
型 配列変数名[][];
int型の二次元配列の例を示す。
int[][] arrayOfIntTwoDimensions;
オブジェクトの配列変数も同じ書き方になる。
Object[][] arrayOfObjects;
二次元配列を宣言しても、それは配列の入れ物がどこにあるかを示す変数を定義しただけだ。次に、配列を生成することが必要である。
生成
配列の生成は、配列の大きさに応じて配列の要素を入れるための入れ物を確保することである。生成を行うためにはnew演算子を使い、配列の大きさを指定して、次のように書く。
配列変数名 = new 型[配列の要素数][配列の要素数];
例えば、次のコードは最初の配列の要素数が4個、2番目の配列の要素数が5個の配列を生成するint型の二次元配列の例を示す。
int[][] arrayOfIntTwoDimensions = new int[4][5];
オブジェクトの参照型の配列変数も同じ書き方になる。
Object[][] arrayOfObjectTwoDimensions = new Object[4][5];
では、どのようにこれらの配列にアクセスするのか見てみよう。
二次元配列へのアクセス
配列変数にアクセスするには、アクセスしたい要素の入っている配列のインデックスを指定して要素へアクセスする。この時、インデックスは0から始まることに注意しよう。
書き方の基本は簡単だ。
要素の値 = 配列変数[インデックス][インデックス];
int型の配列から値を読み出す例を見てみよう。先に例として挙げたint型の配列の要素にアクセスする場合はこうなる。
value = array[2][3];
この場合に二次元配列arrayのどの要素にアクセスしているかというと最初の配列のインデックスが2なので、1を加えた3番目の配列になる。また、2番目の配列のインデックスrが3なので、1を加えた4番目の配列になる。それで、次の図で説明すると要素の位置は上から3番目の左から4番目の配列の要素となる。
実際のプログラムで、配列の宣言からアクセスまでを見てみよう。
サンプルプログラム
このサンプルプログラムは、二次元配列のarray[2][3]とその前後の要素に値を代入し、それをまた読み出し表示する。それぞれの配列に代入した値が、同じインデックスでそのまま表示されていることが確認できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class CreationAndAccess { public static void main(String[] args) { int[][] array;//[1] array = new int[4][5];//[2] array[2][2] = 22;//[3] array[2][3] = 23;//[4] array[2][4] = 24;//[5] int value = array[2][2];//[6] System.out.println("[7] array[2][2]=" + value); value = array[2][3];//[8] System.out.println("[9] array[2][3]=" + value); value = array[2][4];//[10] System.out.println("[11] array[2][4]=" + value); } } |
実行結果
1 2 3 |
[7] array[2][2]=22 [9] array[2][3]=23 [11] array[2][4]=24 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 配列変数arrayを定義する。
- [2] 配列arrayを最初の要素数を4、次の要素数を5で生成する。
- [3] array[2][3]に23を代入する。
- [4] array[2][4]に24を代入する。
- [5] array[2][5]に25を代入する。
- [6]-[11] 配列arrayに代入した位置の要素を表示する。
二次元配列の初期化
配列に初期値を代入する方法として、次のようにひとつひとつ値を代入することもできる。前のセクションのサンプルプログラムでは、この方法で初期値が代入されていた。しかし、大きな配列全てについて次のように書くのは大変なことだ。
1 2 3 4 5 6 7 8 |
int array[][]; array = new int[2][3]; array[0][0] = 0; array[0][1] = 1; array[0][2] = 2; array[1][0] = 3; array[1][1] = 4; array[1][2] = 5; |
これをまとめて書くことができる。
int array[][] = {{0,1,2}, {3,4,5}};
かなり簡単になる。さらに、ループを使ってまとめて表示するために配列の長さを知る必要がある。
書き方の基本は簡単だ。
1番目の配列の長さ = 配列変数.length;
2番目の配列の長さ = 配列変数[インデックス].length;
実際のプログラムを見てみよう。
サンプルプログラム
このサンプルプログラムは、二次元配列を定義すると同時に初期値を代入する。その後、代入された値を、forループを使って表示している。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class ArrayInitializer { public static void main(String[] args) { int array[][] = {{0,1,2}, {3,4,5}};//[1] for (int dimension1 = 0; dimension1 < array.length; dimension1++) {//[2] for (int dimension2 = 0; dimension2 < array[dimension1].length; dimension2++) {//[3] int value = array[dimension1][dimension2];//[4] System.out.println("[5] value[" + dimension1 + "][" + dimension2 + "]=" + value); } System.out.println("[6]"); } } } |
実行結果
1 2 3 4 5 6 7 8 |
[5] value[0][0]=0 [5] value[0][1]=1 [5] value[0][2]=2 [6] [5] value[1][0]=3 [5] value[1][1]=4 [5] value[1][2]=5 [6] |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 配列変数arrayを定義し、初期値で初期化する。
- [2]-[6] 配列arrayの全ての要素を表示する。
多次元配列参考ページ
次のページも参考にしていただければと思う。
まとめ
このページではJavaの二次元配列の書き方・使い方についてお伝えした。Javaでプログラムを組んでいく上で、必ず使う文法だ。マスターしていただければと思う。