Java语法 | 多重循环

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 以及标记跳出,是编写高效、清晰的多重循环代码的关键。建议通过九九乘法表、图形打印、二维数组遍历等经典练习,逐步加深对多重循环的理解。

相关推荐
Han.miracle1 小时前
MySQL InnoDB:MVCC、记录锁、间隙锁、二级索引MVCC底层原理
java·开发语言
.YM.Z1 小时前
C++——【红黑树】原理详解:定义、性质、插入变色与旋转实现
开发语言·c++
明如正午1 小时前
用 Python 一键把 ASC 文件转成 BLF(基于 python-can)
python·can·blf·asc
不停喝水1 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
y1su2 小时前
Leetcode 二分模板
java·数据结构·算法·leetcode·排序算法
leisoo80972 小时前
融资融券数据怎么查两融指标含义与杠杆观察方法 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
霸道流氓气质2 小时前
多Agent通信机制与协议设计完全指南:从FIPA-ACL到A2A/MCP的Java生产级实战
java·开发语言
007张三丰2 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理