お疲れ様です。はるさらと申します。
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つをうまく使い分けることで、可読性の高いコードが書けるようになります。
関連記事
どなたかのお役に立てば幸いです。
それではまたー!





































