Java中的嵌套循环指的是在一个循环结构的循环体内部,再定义另一个完整的循环结构,外层循环每执行一次,内层循环都会完整执行完所有轮次,这种结构在处理多维度数据、打印规律图形等场景中非常常用。

嵌套循环的基本结构
嵌套循环没有固定的语法限制,任意两种循环结构都可以互相嵌套,常见的组合有for循环嵌套for循环、while循环嵌套while循环、for循环嵌套while循环等。核心规则是内层循环必须完全写在外层循环的循环体内部,不能出现内外层循环交叉的情况。
for循环嵌套for循环
这是最常用的嵌套循环形式,适合已知内外层循环次数的场景,比如打印九九乘法表、打印矩形图形等。以下是一个打印3行4列星号的示例:
public class NestedForLoop {
public static void main(String[] args) {
// 外层循环控制行数,共3行
for (int i = 0; i < 3; i++) {
// 内层循环控制每行的列数,共4列
for (int j = 0; j < 4; j++) {
// 打印星号,不换行
System.out.print("* ");
}
// 每行打印完成后换行
System.out.println();
}
}
}
上述代码的执行逻辑是:外层循环i从0开始,第一次i=0时,内层循环j从0到3执行4次,打印4个星号,然后换行;接着i=1,内层循环再次执行4次,重复直到外层循环结束,最终输出3行4列的星号矩阵。
while循环嵌套while循环
当内外层循环的次数不确定,需要根据条件判断时,可以使用while循环嵌套。以下是一个计算1到3每个数的累加和的示例:
public class NestedWhileLoop {
public static void main(String[] args) {
int i = 1;
// 外层while循环,控制计算1到3的累加
while (i <= 3) {
int sum = 0;
int j = 1;
// 内层while循环,计算当前i的累加和
while (j <= i) {
sum += j;
j++;
}
System.out.println(i + "的累加和是:" + sum);
i++;
}
}
}
这段代码中,外层循环依次取1、2、3,每次外层循环执行时,内层循环都会计算从1到当前i的累加和,最终输出每个数的累加结果。
for循环嵌套while循环
也可以混合使用不同的循环类型,比如外层用for循环控制固定次数,内层用while循环根据条件执行。以下是一个示例:
public class MixedNestedLoop {
public static void main(String[] args) {
// 外层for循环,固定执行2次
for (int i = 0; i < 2; i++) {
int j = 0;
// 内层while循环,当j小于3时执行
while (j < 3) {
System.out.println("外层第" + i + "次,内层第" + j + "次");
j++;
}
}
}
}
嵌套循环的常见使用场景
- 打印规律图形:比如直角三角形、菱形、九九乘法表等,这类场景通常需要两层循环分别控制行和列的规律。
- 处理二维数据:比如二维数组的遍历,外层循环遍历行,内层循环遍历列,获取每个位置的元素。
- 多层条件筛选:比如从一组数据中筛选同时满足多个条件的元素,外层循环遍历所有元素,内层循环判断多个条件是否同时成立。
嵌套循环的注意事项
首先要注意循环变量的作用域,内层循环定义的变量不能在外层循环中使用,避免变量冲突。其次嵌套循环的层数不宜过多,一般建议不超过3层,层数过多会导致代码可读性下降,执行效率也会降低。另外要确认循环的终止条件正确,避免出现死循环的情况,比如内外层循环的变量没有正确更新,导致循环无法结束。
如果需要提前结束嵌套循环,可以使用break关键字,但是break只能结束当前所在的循环,如果需要结束外层循环,可以给外层循环添加标签,然后使用break 标签名的形式。示例如下:
public class BreakNestedLoop {
public static void main(String[] args) {
// 给外层循环添加标签outer
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
// 当i=1且j=1时,结束外层循环
break outer;
}
System.out.println("i=" + i + ",j=" + j);
}
}
}
}
上述代码中,当i=1、j=1时,执行break outer,直接结束外层循环,后续的循环不再执行。