【Java】2次元配列を拡張for文で扱う方法まとめ|初心者向けサンプル付き解説

お疲れ様です。はるさらと申します。

Javaで2次元配列を扱う際、for文を使ってループ処理することが多いですが、
より簡潔に書ける「拡張for文(enhanced for loop)」を使う方法もあります。
この記事では、2次元配列を拡張for文で扱う基本から、実務でよくあるケース、
そして注意点までをわかりやすく解説します。


2次元配列と拡張for文の基本構文を理解しよう

まずは基本から整理しておきましょう。
2次元配列は「配列の配列」です。

そのため、拡張for文を使う場合は、外側のループで“1次元配列”を取り出し、
内側のループで“要素”を処理
します。

基本の書き方

public class Sample1 {
    public static void main(String[] args) {
        int[][] array = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        for (int[] row : array) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

実行結果

1 2 3 
4 5 6 
7 8 9 

解説

  • for (int[] row : array) の部分では、
    2次元配列の「1行分(int[])」を取り出しています
  • for (int num : row) で、各要素(列の値)を順に処理します。
    このように、入れ子にすることで2次元配列を簡潔に処理できます。

実務で使える応用例:2次元配列から合計値を計算する

拡張for文は、単純な表示だけでなく、業務処理にも役立ちます。
例えば、売上や点数などの集計処理を行う場合に便利です。

サンプルコード

public class Sample2 {
    public static void main(String[] args) {
        int[][] sales = {
            {100, 200, 300},
            {150, 250, 350},
            {400, 500, 600}
        };

        int total = 0;

        for (int[] row : sales) {
            for (int amount : row) {
                total += amount;
            }
        }

        System.out.println("合計売上: " + total);
    }
}

実行結果

合計売上: 2850

解説

  • row で1行ずつ取り出し、amount で各金額を処理しています。
  • インデックス操作を一切行わないため、
    コードの可読性が高く、バグも少なくなります

注意点

拡張for文では「インデックス番号(i, jなど)」が使えません
「何行目」「何列目」を意識して処理したい場合は、従来のfor文を使う必要があります。


拡張for文と通常for文の違いを比較

拡張for文と通常for文の使い分けを理解しておくと、
場面に応じた選択ができます。

通常for文の例

public class Sample3 {
    public static void main(String[] args) {
        int[][] data = {
            {10, 20},
            {30, 40}
        };

        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.println("[" + i + "][" + j + "] = " + data[i][j]);
            }
        }
    }
}

拡張for文の例

public class Sample4 {
    public static void main(String[] args) {
        int[][] data = {
            {10, 20},
            {30, 40}
        };

        for (int[] row : data) {
            for (int value : row) {
                System.out.println(value);
            }
        }
    }
}

比較まとめ

比較項目通常for文拡張for文
書きやすさ△(やや冗長)○(シンプル)
インデックス使用可能不可
要素の変更可能基本的に不可(参照のみ)
処理の安全性やや低い(範囲外アクセスあり得る)高い(範囲外アクセスなし)

使い分けの目安

  • 配列の内容を参照・出力するだけなら拡張for文。
  • インデックスを使って位置指定が必要な場合は通常for文。

拡張for文でよくある間違いと注意点

① 要素の変更が反映されない

以下のコードは一見動きそうですが、実際には配列の値は変わりません。

public class Sample5 {
    public static void main(String[] args) {
        int[][] nums = {
            {1, 2},
            {3, 4}
        };

        for (int[] row : nums) {
            for (int n : row) {
                n *= 2;  // 値を2倍にしているつもり
            }
        }

        System.out.println(nums[0][0]); // 結果は1のまま
    }
}

理由

拡張for文で取り出した変数 n は、元の配列要素のコピーです。
実際の配列データには反映されない点に注意しましょう。


まとめ:2次元配列+拡張for文でコードをシンプルに

拡張for文を使うことで、2次元配列をより直感的に扱うことができます。
特に「データの出力」や「集計処理」など、単純な反復処理では非常に有効です。

ただし、インデックスを利用したい場面や、
要素を直接書き換える処理では通常のfor文が必要です。
この2つをうまく使い分けることで、可読性の高いコードが書けるようになります。


関連記事

どなたかのお役に立てば幸いです。
それではまたー!