では、
テーマ:「for文のネスト(入れ子)処理」を、
プログラミング初心者向けにかみ砕いた テキスト教材スタイル(ASCII図+コード+表)
で解説します。
for文のネスト(入れ子)とは
ある for 文の中に、もう1つの for 文を入れることを
「for文のネスト(入れ子)」 といいます。
for (外側のカウンタ) {
for (内側のカウンタ) {
// 内側の処理
}
}
Javaネストを使うと、「二重の繰り返し処理」ができます。
例えば、行と列を使って「表」や「九九表」などを作るときに便利です。
イメージ図(処理の流れ)
外側for → 内側for
↓
+--- 外側1回目(i=1)
| +-- 内側1回目(j=1)
| +-- 内側2回目(j=2)
| +-- ...
|
+--- 外側2回目(i=2)
| +-- 内側1回目(j=1)
| +-- 内側2回目(j=2)
| +-- ...
|
...(繰り返し)
外側が1回動くたびに、内側が全部まわるイメージです。
基本例:九九表の出力
public class NestedForExample {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) { // 外側:段(1〜9)
for (int j = 1; j <= 9; j++) { // 内側:掛ける数(1〜9)
System.out.print(i * j + "\t"); // 結果をタブ区切りで表示
}
System.out.println(); // 改行
}
}
}
Java🖥 出力結果(抜粋):
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
...
ステップ解説
| ステップ | i(外側) | j(内側) | 出力 | 備考 |
|---|---|---|---|---|
| 1 | 1 | 1 | 1×1=1 | 外側1回目、内側1回目 |
| 2 | 1 | 2 | 1×2=2 | 内側2回目 |
| … | 1 | 9 | 1×9=9 | 内側9回目終了 |
| 10 | 2 | 1 | 2×1=2 | 外側2回目、内側再スタート |
実務でよくあるネストforの使い方
| シーン | 説明 | 例 |
|---|---|---|
| 二次元データ処理 | 配列や行列を扱う | int[][] matrix の全要素を走査 |
| ファイル入出力 | 行×列のデータ整形 | CSVやExcel出力時の整形 |
| 組み合わせチェック | 2つのリストを全パターン照合 | 商品×クーポンの組合せ検索 |
| テーブル描画 | HTMLやコンソール出力 | 表形式の出力処理 |
実務サンプル:二次元リスト処理
List<List<String>> table = List.of(
List.of("山田", "営業", "東京"),
List.of("佐藤", "開発", "大阪"),
List.of("田中", "総務", "名古屋")
);
for (List<String> row : table) { // 外側:行(人)
for (String col : row) { // 内側:列(情報)
System.out.print(col + "\t"); // 各要素を出力
}
System.out.println(); // 改行
}
Java🖥 出力結果:
山田 営業 東京
佐藤 開発 大阪
田中 総務 名古屋
注意点(アンチパターン)
| パターン | 問題点 | 改善方法 |
|---|---|---|
| ネストが3重以上 | 可読性・保守性が下がる | メソッド分割 or Stream利用 |
| インデント深すぎ | ロジックが見づらい | 早期return・continueの活用 |
| 無駄なループ | パフォーマンス悪化 | 条件を外側で絞る |
まとめ
- forの中にforを入れる → 「ネスト」
- 外側が1回動くと内側は全ループする
- 二次元データ・表・組合せ処理で頻出
- ネストが深いときは分割を検討
