Java | for文のネスト(入れ子)処理

Java Java
スポンサーリンク

九九表の流れを ASCII 図で可視化 — 動きがわかる図解

では for のネスト(外側 i、内側 j) が九九表(1〜9 の掛け算表)をどのように動くか、「ポインタがどこを指してるか」 を段階的に見せます。
各フレームは「外側 i の値」「内側 j の値」「出力セル」を表します。動きを追うとループのイメージがつかみやすくなります。


ソースコード(おさらい)

for (int i = 1; i <= 9; i++) {      // 外側ループ:段
    for (int j = 1; j <= 9; j++) {  // 内側ループ:掛ける数
        System.out.print(i * j + "\t");
    }
    System.out.println();
}
Java

全体イメージ(マトリクス)

行 = i(1〜9)、列 = j(1〜9)と見立てると、九九表はこうなります(抜粋):

   j→ 1  2  3  4  5  6  7  8  9
i
1     1  2  3  4  5  6  7  8  9
2     2  4  6  8 10 12 14 16 18
3     3  6  9 12 15 18 21 24 27
...
9     9 18 27 36 45 54 63 72 81

フレーム式の動き(ポインタを ▶ で表示)

外側 i=1 のとき、内側 j が 1→9 まで動く。
そのあと外側が i=2 に進み、内側がまた 1→9 をなめるように進む――これがネストの基本動き。

フレーム 1:初期(i=1, j=1)

i=1 ▶ j=1:  [▶1]  2  3  4  5  6  7  8  9
i=2     :   2  4  6  8 10 12 14 16 18
...

出力: 1


フレーム 2:i=1, j=2

i=1 ▶ j=2:   1 [▶2]  3  4  5  6  7  8  9
i=2     :    2  4  6  8 10 12 14 16 18
...

出力: 2


フレーム 3:i=1, j=3

i=1 ▶ j=3:   1  2 [▶3]  4  5  6  7  8  9
i=2     :    2  4  6  8 10 12 14 16 18
...

出力: 3

(この調子で j が 9 まで進む)


フレーム 9(内側終了):i=1, j=9

i=1 ▶ j=9:   1  2  3  4  5  6  7  8 [▶9]
i=2     :    2  4  6  8 10 12 14 16 18
...

出力: 9
内側ループ終了 → System.out.println() で改行 → 次フレームは i=2, j=1 に移る


フレーム 10:i=2, j=1(外側が増える)

i=1     :    1  2  3  4  5  6  7  8  9
i=2 ▶ j=1:  [▶2]  4  6  8 10 12 14 16 18
i=3     :    3  6  9 12 15 18 21 24 27
...

出力: 2(2×1)


続きのイメージ

外側 i が 1→9 各値で、内側 j が 1→9 を全部回る。
視覚的に表すとこうなります(矢印はループの「スキャン方向」):

i=1: ▶→▶→▶→▶→▶→▶→▶   (j:1→9)
i=2: ▶→▶→▶→▶→▶→▶→▶
i=3: ▶→▶→▶→▶→▶→▶→▶
...
i=9: ▶→▶→▶→▶→▶→▶→▶

ステップ表(最初の 12 ステップを追う)

ステップij出力 (i×j)備考
1111外側開始、内側1回目
2122内側進行
3133
199内側終了(改行)
10212外側 i=2 開始、内側リセット
11224
12236

視覚化(「指さし」アニメ風の短い流れ)

簡単な疑似アニメを4フレームで示す([ ] は現在処理中セル):

Frame A (i=1 start)
[1] 2 3 4 5 6 7 8 9
2  4 6 8 10...

Frame B (i=1, mid)
1 2 [3] 4 5 6 7 8 9
2 4 6 8 10...

Frame C (i=1 end)
1 2 3 4 5 6 7 8 [9]
2 4 6 8 10...

Frame D (i=2 start)
1 2 3 4 5 6 7 8 9
[2] 4 6 8 10...

これをループで繰り返すイメージです。


覚えておくべきポイント

  • 外側 i が 1 回進むごとに、内側 j最初から最後まで 回る(再スタートする)。
  • 出力は行単位(i 固定)で並び、内側が終わるごとに改行される。
  • ネストの深さが増えるほど「総ループ回数」は指数的に増える(ここでは 9×9 = 81 回の出力)。

練習(自分で確認してみる)

  1. 上のコードを実行して、実際にターミナルで出力を確認する。
  2. System.out.print の代わりに System.out.println("i=" + i + " j=" + j + " -> " + (i*j)); に変えて、ポインタの動きをログで見る
  3. for (int i = 1; i <= 3; i++)j <= 4 に変えて、フレームを手で追ってみる(小さい表で動きがつかみやすい)。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました