什么是双重循环?

双重循环:我们从字面上理解它,就是有两个循环套在一起

详细解释

双重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("*");
 }

的初始值定义为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颗“星号”

就不多演示了,还不懂的话,就看看拆解代码的内层循环的循环条件的变化

break java 多重for java双重for循环_嵌套

注意: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调试慢慢摸索,这样记忆力更加深刻

break java 多重for java双重for循环_java_02

 扩展

给大家放一个问题:这样用“*”输出一个菱形