Java 速習チュートリアル

Java 多次元配列

1. 多次元配列

多次元配列とは、配列を要素として持つ配列のことです。

これを利用することで、データを行(Row)と列(Column)を持つテーブル形式で保存することができます。

2次元配列を作成するには、各行をそれぞれの中括弧 { } 内に記述します。

int[][] myNumbers = { {1, 4, 2}, {3, 6, 8} };

この例では、myNumbers は2つの配列(2つの行)を持っています。

  • 1行目:{1, 4, 2}
  • 2行目:{3, 6, 8}

2. 要素へのアクセス (Access Elements)

2次元配列のエレメントにアクセスするには、2つのインデックス(Index)が必要です。1つ目は「行」、2つ目は「列」を指定します。

覚えておくべきルール: 配列のインデックスは 0 から始まります。つまり、行 0 は最初の行、列 0 は最初の列を指します。(したがって、行インデックス 1 は2行目、列インデックス 2 は3列目となります。)

以下のステートメントは、myNumbers 配列の2行目(インデックス 1)、3列目(インデックス 2)のエレメントにアクセスします。

2.1 インデックスによるアクセス例

int[][] myNumbers = { {1, 4, 2}, {3, 6, 8} };
System.out.println(myNumbers[1][2]); // 出力: 8

以下の例では、0行目、1列目の値を出力します。

int[][] myNumbers = { {1, 4, 2}, {3, 6, 8} };
System.out.println(myNumbers[0][1]); // 出力: 4

3. 要素の値の変更

既存のエレメントの値を上書きする場合も、同じように2つのインデックス(行、列の順)を指定します。

3.1 要素の書き換え例

int[][] myNumbers = { {1, 4, 2}, {3, 6, 8} };
myNumbers[1][2] = 9;
System.out.println(myNumbers[1][2]); // 8 の代わりに 9 が出力されます

4. 行と列の長さ

length プロパティを使用することで、行の数を取得できます。また、myNumbers[row].length を使用することで、特定の行における列の数を取得できます。

4.1 配列サイズの取得例

int[][] myNumbers = { {1, 4, 2}, {3, 6, 8, 5, 2} };
System.out.println("行の数: " + myNumbers.length);             // 出力: 2
System.out.println("0行目の列数: " + myNumbers[0].length); // 出力: 3
System.out.println("1行目の列数: " + myNumbers[1].length); // 出力: 5

       エンジニア向けの補足: Javaでは、各行が異なる長さを持つことができます(ジャグ配列)。上記の例では、2行目のエレメント数が1行目よりも多くなっていますが、これはJavaにおいて完全に有効な構造です。

5. 多次元配列のループ処理

すべてのエレメントを順番に走査するには、for ループの中に別の for ループを配置します。

5.1 ネストした for ループによる走査

int[][] myNumbers = { {1, 4, 2}, {3, 6, 8, 5, 2} };

for (int row = 0; row < myNumbers.length; row++) {
  for (int col = 0; col < myNumbers[row].length; col++) {
    System.out.println("myNumbers[" + row + "][" + col + "] = " + myNumbers[row][col]);
  }
}

5.2 拡張 for 文(for-each)による走査

また、両方の階層で 拡張 for 文 を使用することもできます。こちらの方が可読性が高いと感じる開発者も多いでしょう。

int[][] myNumbers = { {1, 4, 2}, {3, 6, 8, 5, 2} };

for (int[] row : myNumbers) {
  for (int num : row) {
    System.out.println(num);
  }
}