嵌套循环允许在另一个循环内执行一个循环序列。当需要遍历多维结构时使用,例如二维数组或元素组合。第一个循环称为外部循环,内部的循环称为内部循环。
与嵌套结构(如矩阵或图)相关的需求导致了嵌套循环的出现。包括 Java 在内的编程语言最初就支持这种机制,用于编写数组、图、网格等的处理任务。
如果不考虑迭代次数,使用嵌套循环可能会导致高时间复杂度。代码可读性和索引错误的问题常常出现。错误的使用会导致多次执行相同的操作。
代码示例:
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(); }
关键特征:
是否可以通过 break 同时结束两个循环?
普通的 break 语句只会结束内循环。要同时退出多个循环,可以使用标签(label):
outer: for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (条件) break outer; } }
嵌套循环是否会导致无限循环?
是的,如果任何循环的退出条件实现错误,就会产生无限循环。这种情况在初始化或计数器增加时出错时尤为常见。
可以从内循环中修改外循环的变量吗?
是的,技术上可以,但这会大大降低代码的可读性并导致错误。最好避免这种情况,并明确区分每个循环的工作。
实现二维数组的遍历,但在所有地方都使用 i 代替 i 和 j:
for (int i = 0; i < n; i++) { for (int i = 0; i < m; i++) {...} }
优点:
缺点:
使用不同的变量名:
for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) {...} }
优点:
缺点: