ネストされたループは、for ループをネストした while ループ、または while ループをネストした do-while ループにすることができます。つまり、さまざまなタイプのループを外部ループまたは内部ループとして使用できます。
プログラムがネストされたループに遭遇すると、外側のループのループ条件が許せば、外側のループのループ本体が実行され、内側のループは外側のループのループ本体によって実行されます。内側のループのみが必要となります。繰り返される独自のループ本体を実行するだけです。
内側のループの実行が終了し、外側のループのループ本体の実行が終了すると、再度外側のループのループ条件を計算し、再び外側のループのループ本体の実行を開始するかどうかを決定する。
上記の解析によれば、外側のループのループ数をn、内側のループのループ数をmとすると、実際には内側のループのループ本体をn×m回実行する必要がある。
図 1 から、ネストされたループは、内側のループを外側のループと見なすループ本体です。内側のループのループ条件が false の場合にのみ、内側のループが完全に飛び出し、外側のループの現在のループを終了して次のループを開始できます。以下は、入れ子ループを使用して九九を出力する例です。
public static void main(String[] args) {
// 外側のループ
for (int i = 1; i <= 9; i++) {
// 内側のループ
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + j * i + "\t");
}
System.out.println();
}
}
上記のプログラムを実行すると、次の結果が表示されます。
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
上記の実行結果からわかるように、ネストされたループに入るとき、ループ変数 i は 1 から始まり、その後外側のループに入ります。外側のループに入ると、内側のループは i を値 0 の通常の変数として扱います。外側のループの現在のサイクルでは、内側のループは通常のループです。
実際、ネストされたループは 2 レベルのネストだけでなく、3 レベルのネスト、4 レベルのネストにすることもできます。ループがどのようにネストされているかに関係なく、内側のループは常に外側のループのループ本体として扱うことができます。ループの違いは、ループ本体に繰り返し実行する必要があるコードが含まれていることです。
マスターする必要があり、面接で頻繁に遭遇するバブル ソートについては、配列の使用法をすでに理解している場合は、「 Java バブル ソート」セクションを参照してください。