カテゴリ: Javaの配列 更新日: 2025/04/25

Java の多次元配列とは?二次元配列を使ってみよう

098
Java の多次元配列とは?二次元配列を使ってみよう

新人と先輩の会話形式で理解しよう

新人

「Java で表のようなデータを扱うにはどうすればいいですか?」

先輩

「その場合は、二次元配列を使うと便利だよ。」

新人

「二次元配列って何ですか?」

先輩

「配列の中にさらに配列を持つ構造で、行と列のデータを扱えるんだ。詳しく見ていこう!」

1. Java の多次元配列とは?(基本的な説明)

1. Java の多次元配列とは?(基本的な説明)
1. Java の多次元配列とは?(基本的な説明)

Java の配列には一次元配列(通常の配列)と多次元配列があります。

多次元配列は、配列の中にさらに配列を持つ構造になっています。特に、二次元配列は行と列のデータを扱うのに適しています。

例えば、以下のような表を二次元配列で表現できます。

列 0 列 1 列 2
1 2 3
4 5 6

このデータは、二次元配列を使うことでプログラム内で扱えます。

2. 二次元配列を作る基本的な方法

2. 二次元配列を作る基本的な方法
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. 二次元配列の要素にアクセスする方法

3. 二次元配列の要素にアクセスする方法
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

このように、配列名[行番号][列番号] で要素を取得できます。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. 二次元配列をループで処理する方法

4. 二次元配列をループで処理する方法
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. 二次元配列の初期化のいろいろな方法

5. 二次元配列の初期化のいろいろな方法
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. 二次元配列を使った実践的な例(表データの管理)

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. 二次元配列のメリットと注意点

7. 二次元配列のメリットと注意点
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. 練習問題:「二次元配列を使ってみよう」

8. 練習問題:「二次元配列を使ってみよう」
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

このように、二次元配列を使うと複数のデータを一括で管理しやすくなります。

Javaの配列の一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク