
3.4 循环嵌套
顾名思义,循环嵌套就是在循环中嵌套一层循环,先执行外层循环,内层循环作为外层循环的循环体。循环嵌套可以是while循环语句嵌套do-while循环语句,也可以是for循环语句嵌套while循环语句,还可以是for循环语句嵌套for循环语句,…,即各类循环语句都可以作为外层循环,也可以作为内层循环。程序中最常见的是for循环语句嵌套for循环语句。当程序碰到循环嵌套时,先进行外层循环的循环条件判断,如果成立则开始执行外层循环的循环体,该循环体内包含内层循环,内层循环执行结束且外层循环的循环体也执行完毕时,才可以再次进行外层循环的循环条件判断,决定是否再次进入外层循环的循环体。循环嵌套的执行流程如图3.11所示。

图3.11 循环嵌套处理流程图
从图3.11可以看出,循环嵌套就是把内层循环作为外层循环的循环体在执行操作。只有内层循环的循环条件为false时,内层循环才可以结束,外层循环才算完成了一次循环,开始进入下一次循环。
接下来,利用循环嵌套来实现九九乘法表,如例3-12所示。
【例3-12】 Demo0312.java

程序的运行结果如下:
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
例3-12中,第5~10行是外层循环,使用i来做外层循环的循环变量,初始值为1。外层循环用来控制九九乘法表总共有几行,因此循环条件为i <= 9,即输出9行。第6~8行是内层循环,使用j来做内层循环的循环变量,初始值为1。内层循环用来控制九九乘法表每行应该输出几列。众所周知,九九乘法表第i行的最后就是i * i = 乘积,所以内层循环每一次的执行次数就是i的值,因此内层循环的循环条件为j <= i,即内层循环次数随着i的值而变化。第7行是内层循环的循环体,输出i * j的值。注意此处print的写法,不带ln意味着输出不换行,后边的\t意味着输出制表符。第9行是用来换行的。当内层循环完成一遍循环后,即九九乘法表一行输出完毕,则换行输出下一行,因此换行之后执行外层循环的循环变量更替,即i++,如果此时i <= 9,则继续输出下一行,否则外层循环结束。
此处是以两层嵌套为例在进行讲解,但实际上,循环嵌套也可以嵌套多层。无论如何嵌套,都可以将内层循环作为外层循环的循环体来看待,只不过这个循环体里包含了重复执行的代码。