5. 多重循环和程序调试

5.1 多重循环

  • 多重循环是指循环中嵌套循环结构

  • 多重循环注意事项

    • 各种循环可以互相嵌套
    • 一般不要超过三层嵌套
    • 外层循环变化一次,内层循环要全部执行完
  • 代码

    **需求1:**使用循环嵌套输出10*10的矩形

      public static void demo() {
         
        for (int i = 0; i < 10; i++) {
         
          System.out.print("第" + (i + 1) + "行: ");
          for (int j = 0; j < 10; j++) {
         
            System.out.print("*");
          }
          System.out.println("");
        }
      }
    

    **需求2:**输出n层的直角三角形

      public static void demo() {
         
        Scanner sc = new Scanner(System.in);
        System.out.println("输入直角三角形的高: ");
        int n = sc.nextInt();
        if (n < 0) {
         
          System.out.println("三角形的层高不能为负数!");
          // 终止正在执行的函数,return后面的语句不会再执行
          return;
        }
        // 外层循环控制行
        for (int i = 0; i < n; i++) {
         
          // 内层循环控制*个数
          for (int j = 0; j <= i; j++) {
         
            System.out.print("*");
          }
          // 输出*结束,换行
          System.out.println();
        }
      }
    

    **需求3:**输出倒n层的直角三角形

      public static void demo() {
         
        Scanner sc = new Scanner(System.in);
        System.out.println("输入直角三角形的高: ");
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
         
          for (int j = 0; j < n - i; j++) {
         
            System.out.print("*");
          }
          System.out.println();
        }
      }
    

    **需求4:**输出n层靠右直角三角形

      public static void demo() {
         
        Scanner sc = new Scanner(System.in);
        System.out.println("输入直角三角形的高: ");
        int n = sc.nextInt();
        // 行
        for (int i = 0; i < n; i++) {
         
          // 左边空格
          for (int k = 0; k < n - i - 1; k++) {
         
            System.out.print(" ");
          }
          // *
          for (int j = 0; j <= i; j++) {
         
            System.out.print("*");
          }
          // 换行
          System.out.println();
        }
      }
    

    **需求5:**输出n层平行四边形

      public static void demo() {
         
        Scanner sc = new Scanner(System.in);
        System.out.println("输入平行四边形的高: ");
        int n = sc.nextInt();
        // 行
        for (int i = 0; i < n; i++) {
         
          // 空格
          for (int j = 0; j < n - i - 1; j++) {
         
            System.out.print(" ");
          }
          // *
          for (int j = 0; j < n; j++) {
         
            System.out.print("*");
          }
          // 换行
          System.out.println();
        }
      }
    

    **需求6:**输出n层等腰三角形

      public static void demo() {
         
        Scanner sc = new Scanner(System.in);
        System.out.println("输入三角形的高: ");
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
         
          // 空格
          for (int j = 0; j < n - i - 1; j++) {
         
            System.out.print(" ");
          }
          // *
          for (int j = 0; j < 2 * i + 1; j++) {
         
            System.out.print("*");
          }
          // 换行
          System.out.println();
        }
      }
    

    需求7: 9*9乘法表

      public static void task() {
         
        for (int i = 1; i <= 9; i++) {
         
          for (int j = 1; j <= i; j++) {
         
            System.out.print(i + " × " + j + " = " + (i * j) + "\t");
          }
          System.out.println();
        }
      }
    

    **需求8:**输出数字金字塔

      public static void task() {
         
        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个整数(1-9):");
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
         
          // 空格
          for (int j = 0; j < n - i - 1; j++) {
         
            System.out.print(" ");
          }
          // 数字
          for (int j = 0; j < 2 * i + 1; j++) {
         
            System.out.print(i + 1);
          }
          // 换行
          System.out.println();
        }
      }
    

    **需求9:**n层菱形

    public static void task() {
         
        Scanner sc = new Scanner(System.in);
        System.out.println("输入菱形的高:");
        int h = sc.nextInt();
        if (h <= 0) {
         
          System.out.println("菱形的高是正整数!");
          return;
        }
        // 如果是偶数,层高+1
        h = h % 2 == 0 ? ++h : h;
        // 获得当前菱形的上半部分的高
        int up = h / 2 + 1;
        int down = up - 1;
        System.out.printf("up=%d,down=%d\n", up, down);
    
        // 输出上半部分
        for (int i = 0; i < up; i++) {
         
          // 空格
          for (int j = 0; j < up - i - 1; j++) {
         
            System.out.print(" ");
          }
          // 输出*
          for (int j = 0; j < 2 * i + 1; j++) {
         
            if (j == 0 || j == 2 * i) {
         
              System.out.print("*");
            } else {
         
              System.out.print(" ");
            }
          }
          // 换行
          System.out.println();
        }
    
        // 输出下半部分
        for (int i = 0; i < down; i++) {
         
          // 空格
          for (int j = 0; j <= i; j++) {
         
            System.out.print(" ");
          }
          // 输出*
          for (int j = 0; j < 2 * down - 2 * i - 1; j++) {
         
            System.out.print("*");
          }
          System.out.println();
        }
      }
    

    **需求10:**一只公鸡值5元,一只母鸡值3元,而1元可买3只小鸡。现有100元钱,把钱正好花完,正好买到100只鸡。请问可买公鸡、母鸡、小鸡各几只

      public static void task() {
         
        // 公鸡的个数
        for (int i = 0; i < 21; i++) {
         
          // 母鸡的个数
          for (int j = 0; j < 34; j++) {
         
            // 小鸡的个数
            /* for (int k = 0; k < 101; k++) {
              // 3只小鸡1元,一只小鸡是 1/3.0元,k只是 k/3.0元
              if (i * 5 + 3 * j + k / 3.0 == 100 && (i + k + j) == 100) {
                System.out.println("公鸡有:" + i + "只,母鸡有:" + j + "只,小鸡有:" + k);
              }
            }*/
            int k = 100 - j - i;
            if (i * 5 + 3 * j + k / 3.0 == 100) {
         
              System.out.println("公鸡有:" + i + "只,母鸡有:" + j + "只,小鸡有:" + k);
            }
          }
        }
      }
    

    **需求11:**鸡兔同笼问题:上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?

      public static void task() {
         
        for (int i = 0; i <= 35; i++) {
         
          /*for (int j = 0; j <= 94; j++) {
            if (i + j == 35 && i * 2 + j * 4 == 94) {
              System.out.println("鸡有" + i + "只,兔有" + j + "只");
            }
          }*/
          int j = 35 - i;
          if (i * 2 + j * 4 == 94) {
         
            System.out.println("鸡有" + i + "只,兔有" + j + 
04-22 18:34