1. 什么是多重循环
多重循环,也叫嵌套循环,是指在一个循环语句的循环体内再包含另一个完整的循环语句。外层循环每执行一次,内层循环就会完整地执行一轮。多重循环是 Java 编程中非常常用的结构,常用于处理二维表格、矩阵、图形打印等场景。
Java 中 for、while、do-while 三种循环语句都可以互相嵌套,形成多重循环结构。
2. 多重循环的基本语法
下面以 for 循环嵌套为例,展示多重循环的基本语法结构:
java
for (初始化1; 条件1; 更新1) {
// 外层循环体
for (初始化2; 条件2; 更新2) {
// 内层循环体
}
}
执行流程说明:
- 外层循环先执行初始化,然后判断条件1是否成立。
- 条件1成立时,进入外层循环体,执行到内层循环时,内层循环会完整执行完所有轮次。
- 内层循环结束后,外层循环执行更新1,再次判断条件1,如此反复,直到条件1不成立为止。
3. 多重循环的执行次数
假设外层循环执行 m 次,内层循环每次执行 n 次,那么内层循环体总共会执行 m × n 次。理解这一点,有助于分析程序的运行效率。
看一个具体的例子:
java
public class LoopCount {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 4; j++) {
count++;
}
}
System.out.println("内层循环体共执行了 " + count + " 次");
}
}
运行结果:
java
内层循环体共执行了 12 次
外层循环执行 3 次,内层循环每次执行 4 次,因此内层循环体总共执行 3 × 4 = 12 次。
4. 多重循环的经典应用
4.1 打印九九乘法表
九九乘法表是多重循环最经典的入门案例,外层循环控制行数,内层循环控制每行的列数:
java
public class MultiplicationTable {
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 + "=" + (i * j) + "\t");
}
System.out.println();
}
}
}
运行结果:
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
这里内层循环的结束条件是 j <= i,因此每行输出的列数恰好等于当前行号,形成三角形结构。
4.2 打印直角三角形
java
public class RightTriangle {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
运行结果:
java
*
**
***
****
*****
4.3 遍历二维数组
二维数组的遍历通常使用双重循环,外层循环遍历行,内层循环遍历列:
java
public class TwoDimensionalArray {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
运行结果:
java
1 2 3
4 5 6
7 8 9
5. 多重循环中的 break 和 continue
在多重循环中,break 和 continue 默认只作用于它们所在的那一层循环,不会影响外层循环。
5.1 break 只跳出当前层
java
public class BreakDemo {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break; // 只跳出内层循环
}
System.out.println("i=" + i + ", j=" + j);
}
}
}
}
运行结果:
java
i=1, j=1
i=2, j=1
i=3, j=1
可以看到,内层循环在 j == 2 时跳出,但外层循环仍然继续执行。
5.2 使用标记跳出外层循环
如果需要从内层循环直接跳出外层循环,可以使用带标记的 break:
java
public class LabeledBreakDemo {
public static void main(String[] args) {
outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break outer; // 直接跳出外层循环
}
System.out.println("i=" + i + ", j=" + j);
}
}
}
}
运行结果:
java
i=1, j=1
i=1, j=2
i=1, j=3
i=2, j=1
当 i == 2 && j == 2 时,程序直接跳出整个外层循环,后续不再执行。
6. 多重循环的注意事项
- 循环层数不宜过多:一般建议不超过三层,层数过多会显著降低代码可读性和运行效率。
- 注意变量作用域:内层循环的循环变量不要与外层循环变量重名,避免混淆。
- 关注时间复杂度:双重循环的时间复杂度通常是 O(n²),处理大数据量时要谨慎。
- 合理使用 break 和 continue:默认只影响当前层,需要跳出多层时使用标记。
- 保持代码缩进规范:内层循环体应适当缩进,便于阅读和维护。
7. 总结
多重循环是 Java 编程中处理重复性、规律性任务的重要工具。掌握 for、while 的嵌套写法,理解内外层循环的执行顺序和次数关系,熟练运用 break、continue 以及标记跳出,是编写高效、清晰的多重循环代码的关键。建议通过九九乘法表、图形打印、二维数组遍历等经典练习,逐步加深对多重循环的理解。