什么是双重循环?
双重循环:我们从字面上理解它,就是有两个循环套在一起
详细解释
双重for循环就是在一个for循环里在嵌套另一个for循环,即两个循环嵌套,还有多重循环嵌套的情况,但用的比较少,一般常用的是两个循环嵌套,很少使用多重循环,因为for循环多了会导致代码执行的效率低,而且容易死机,多循环中的总循环次数是相乘的,嵌套几次后几何级数增长,因此通常情况下在循环多次嵌套时,我们是不推荐使用的。
说的再简单点就是,for循环的嵌套,跟我们之前的if嵌套一样
for(循环变量;循环条件;循环操作){
for(循环变量;循环条件;循环操作){
//代码块
}
}
这就是双重for循环的框架
运行路径
外层循环一次,内层全部循环一次(外层循环一次,内层for循环全部执行完成再进行外层的一次循环)
难点
二重循环的难点是内层循环的循环条件,如何控制内层循环的次数
记住外层循环一次,内层循环全部的原则
举个例子,我外层循环定义循环3次,内层循环定义循环2次,每次输出一个“星号”,那么,将会输出几个“星号”呢?
答案是6次(2×3)
分析:
- 外层循环第一次,里面循环完,也就是2次
- 外层循环第二次,里面又重新循环,循环完,还是2次
- 外层循环第三次,里面再次重新循环,又是2次
我们多说无益,来个实际操作
示例
打印以下图形,我们可以用上面提到的公式验证一下
图形
*
* *
* * *
* * * *
* * * * *
这个题目的代码,我先给出,然后分析
代码
public class Star{
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();
}
}
}
我们看看这个图像有多少行? 总共有5行,也就是说我们需要循环5次打印才可以
外部循环
for(int i=1;i<=5;i++){
//循环块2
}
这个循环控制输出的行数,我们这里是5行“星号”,所以这个循环控制成5次
我们开始写里面的循环
内部循环
里面定义一个循环,变量为 j
for(int j=1;j<=i;j++){
System.out.print("*");
}
j 的初始值定义为1,并且j<=i (i也是累加,到5停止),它的循环次数也是循环5次,因为我们这个图像的最后一个输出是5颗“星号”,这里是循环输出了5颗“星号”,所以,j超出5必须停止循环
总体运行过程
到这,许多人会感到有点迷茫,不过没有关系,这是正常,我们好好看看它如何运行:
首先注意看变量:i=1、j=1、i<=5、j
循环运行变化
外层第一次循环: i为1时,开始第一次循环,开始运行里面的第 i(1)次循环,这时,里面的循环,j为1时,j<=i (此时i为1),所以会输出1颗“星号”
拆解代码:第一次外层循环
内层:
for(int j=1;j<=1;j++){
System.out.print("*");
}
System.out.println();
外层第三次、第四次、第五次与第二次一样,i不断累加,依次输出3颗“星号”、4颗“星号”、5颗“星号”
就不多演示了,还不懂的话,就看看拆解代码的内层循环的循环条件的变化
注意:System.out.print("*"): 是没有ln的,所以不会换行,于是内层循环的“星号”是横排叠加的
示例二
打印九九乘法表:
因为这个题目,和上面的代码以及原理一样,只是改变了一些内容,所以我就直接放代码了
代码
public class Jjcfb {
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+" ");
}
System.out.println();
}
}
}
九九乘法表一共有九行,所以外层限制行数为9,于是i=1;i<=9
内层还是j=1;j<=i
如果还不懂,可以用IDEA调试,慢慢摸索,这样记忆力更加深刻
扩展
给大家放一个问题:这样用“*”输出一个菱形?