Java の多次元配列とは?二次元配列を使ってみよう
新人
「Java で表のようなデータを扱うにはどうすればいいですか?」
先輩
「その場合は、二次元配列を使うと便利だよ。」
新人
「二次元配列って何ですか?」
先輩
「配列の中にさらに配列を持つ構造で、行と列のデータを扱えるんだ。詳しく見ていこう!」
1. Java の多次元配列とは?(基本的な説明)
Java の配列には一次元配列(通常の配列)と多次元配列があります。
多次元配列は、配列の中にさらに配列を持つ構造になっています。特に、二次元配列は行と列のデータを扱うのに適しています。
例えば、以下のような表を二次元配列で表現できます。
| 列 0 | 列 1 | 列 2 |
|---|---|---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
このデータは、二次元配列を使うことでプログラム内で扱えます。
2. 二次元配列を作る基本的な方法
Java で二次元配列を作るには、以下のように記述します。
二次元配列の基本構文
public class TwoDimensionalArray {
public static void main(String[] args) {
// 2×3 の二次元配列の宣言と作成
int[][] numbers = new int[2][3];
// 値を代入
numbers[0][0] = 1;
numbers[0][1] = 2;
numbers[0][2] = 3;
numbers[1][0] = 4;
numbers[1][1] = 5;
numbers[1][2] = 6;
// 配列の内容を表示
for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < numbers[i].length; j++) {
System.out.print(numbers[i][j] + " ");
}
System.out.println();
}
}
}
1 2 3
4 5 6
このように、二次元配列では[行番号][列番号]の形式で値を取得したり設定したりします。
3. 二次元配列の要素にアクセスする方法
二次元配列の要素にアクセスするには、行と列のインデックスを指定してデータを取得します。
二次元配列の要素にアクセスする基本例
public class TwoDimensionalArrayAccess {
public static void main(String[] args) {
// 2×3 の二次元配列を作成
int[][] numbers = {
{1, 2, 3},
{4, 5, 6}
};
// 特定の要素を取得
System.out.println("1行2列目の値: " + numbers[0][1]); // 2
System.out.println("2行3列目の値: " + numbers[1][2]); // 6
}
}
1行2列目の値: 2
2行3列目の値: 6
このように、配列名[行番号][列番号] で要素を取得できます。
4. 二次元配列をループで処理する方法
二次元配列のすべての要素を表示する場合、ネストした for 文 を使うと便利です。
for 文を使った二次元配列の処理
public class TwoDimensionalArrayLoop {
public static void main(String[] args) {
// 2×3 の二次元配列を作成
int[][] numbers = {
{1, 2, 3},
{4, 5, 6}
};
// ループで全要素を表示
for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < numbers[i].length; j++) {
System.out.print(numbers[i][j] + " ");
}
System.out.println();
}
}
}
1 2 3
4 5 6
外側の for 文が行を処理し、内側の for 文が列を処理します。
5. 二次元配列の初期化のいろいろな方法
二次元配列は、いくつかの方法で初期化できます。
方法① すべての要素を明示的に設定する
public class TwoDimensionalArrayInit {
public static void main(String[] args) {
// 2×3 の二次元配列の宣言と作成
int[][] numbers = new int[2][3];
// 手動で値を代入
numbers[0][0] = 1;
numbers[0][1] = 2;
numbers[0][2] = 3;
numbers[1][0] = 4;
numbers[1][1] = 5;
numbers[1][2] = 6;
}
}
方法② 配列の中に配列を指定して作成する
public class TwoDimensionalArrayInit2 {
public static void main(String[] args) {
// 直接値を設定
int[][] numbers = {
{1, 2, 3},
{4, 5, 6}
};
}
}
方法③ 長さを決めずに初期化
public class TwoDimensionalArrayInit3 {
public static void main(String[] args) {
// 行ごとに異なる長さの配列
int[][] numbers = new int[2][];
numbers[0] = new int[] {1, 2, 3};
numbers[1] = new int[] {4, 5, 6};
}
}
このように、二次元配列にはさまざまな初期化の方法があります。
6. 二次元配列を使った実践的な例(表データの管理)
二次元配列は、表のデータを管理するのに適しています。例えば、テストの点数 を二次元配列で管理してみましょう。
テストの点数を二次元配列で管理
生徒ごとのテストの点数を二次元配列で管理し、平均点を計算するプログラムです。
public class StudentScores {
public static void main(String[] args) {
// 2×3 の二次元配列(2人の生徒 × 3教科の点数)
int[][] scores = {
{80, 90, 85}, // 1人目の点数
{75, 85, 95} // 2人目の点数
};
// 生徒ごとの平均点を計算
for (int i = 0; i < scores.length; i++) {
int total = 0;
for (int j = 0; j < scores[i].length; j++) {
total += scores[i][j];
}
double average = (double) total / scores[i].length;
System.out.println("生徒 " + (i + 1) + " の平均点: " + average);
}
}
}
生徒 1 の平均点: 85.0
生徒 2 の平均点: 85.0
このように、二次元配列を使うと複数のデータを一括で管理しやすくなります。
7. 二次元配列のメリットと注意点
二次元配列には多くのメリットがありますが、注意すべき点もあります。
二次元配列のメリット
- 表データ(行と列)を簡単に管理できる。
- ネストしたループで効率的にデータを処理できる。
- 配列の長さを固定できるため、メモリ管理がしやすい。
二次元配列の注意点
- サイズが固定されるため、動的なデータ管理には向かない。
- 要素数が多くなるとメモリを多く消費する。
- インデックスの指定を間違えるとエラーが発生する。
注意点の例
例えば、存在しないインデックスを指定するとエラーになります。
public class ArrayIndexError {
public static void main(String[] args) {
int[][] numbers = {
{1, 2, 3},
{4, 5, 6}
};
// 存在しないインデックスにアクセス(エラー)
System.out.println(numbers[2][0]); // エラー発生
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
このように、配列の範囲外にアクセスすると ArrayIndexOutOfBoundsException というエラーが発生します。
8. 練習問題:「二次元配列を使ってみよう」
最後に、二次元配列を使った練習問題を解いてみましょう。
問題 1: 二次元配列の作成と出力
次のプログラムを完成させて、二次元配列の内容を表示してください。
public class ArrayPractice {
public static void main(String[] args) {
// 2×3 の二次元配列を作成
int[][] matrix = {
{10, 20, 30},
{40, 50, 60}
};
// ここに二次元配列を表示するコードを追加してください
}
}
【解答】
ネストした for 文を使って、二次元配列のすべての要素を表示します。
public class ArrayPractice {
public static void main(String[] args) {
// 2×3 の二次元配列を作成
int[][] matrix = {
{10, 20, 30},
{40, 50, 60}
};
// 二次元配列の内容を表示
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
10 20 30
40 50 60
問題 2: 平均点を求めるプログラム
次のプログラムを完成させて、生徒の平均点を表示してください。
public class ScoreAverage {
public static void main(String[] args) {
// 2人の生徒 × 3教科の点数
int[][] scores = {
{85, 90, 80},
{70, 75, 85}
};
// ここに平均点を求めるコードを追加してください
}
}
【解答】
生徒ごとの平均点を計算し、表示します。
public class ScoreAverage {
public static void main(String[] args) {
// 2人の生徒 × 3教科の点数
int[][] scores = {
{85, 90, 80},
{70, 75, 85}
};
// 生徒ごとの平均点を計算
for (int i = 0; i < scores.length; i++) {
int total = 0;
for (int j = 0; j < scores[i].length; j++) {
total += scores[i][j];
}
double average = (double) total / scores[i].length;
System.out.println("生徒 " + (i + 1) + " の平均点: " + average);
}
}
}
生徒 1 の平均点: 85.0
生徒 2 の平均点: 76.66666666666667
このように、二次元配列を使うと複数のデータを一括で管理しやすくなります。