前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java之多重循环控制基本使用

Java之多重循环控制基本使用

作者头像
兮动人
发布2021-06-11 18:58:51
4620
发布2021-06-11 18:58:51
举报
文章被收录于专栏:兮动人的博客

文章目录

多重循环控制

1. 介绍

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。 【建议一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差】
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内 层循环,才可结束外层的当次循环,开始下一次的循环[听不懂,走案例]。
  3. 设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n

2. 多重循环执行步骤分析:

  • 请分析 下面的多重循环执行步骤, 并写出输出 => 内存分析法
代码语言:javascript
复制
	for(int i = 0; i < 2; i++) { 
		for( int j = 0; j < 3; j++) {
		    System.out.println("i=" + i + "j=" + j);
		}
	}

3. 应用实例:

MulForExercise01.java

(1) 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。

  • 思路分析:
  1. 化繁为简 (1) 先计算一个班 , 5个学生的成绩和平均分 , 使用for 1.1 创建 Scanner 对象然后,接收用户输入 1.2 得到该班级的平均分 , 定义一个 doubel sum 把该班级5个学生的成绩累积
代码语言:javascript
复制
	Scanner sc = new Scanner(System.in);
	double sum = 0; //一个班的总成绩
	for (int j = 1;j <= 5;j++){
	    System.out.println("请输入第一个班的第" + j + "个学生的成绩:");
	    double score = sc.nextDouble();
	    sum += score; //累积
	    System.out.println("成绩为:"+score);
	}
	//因为 sum 是5个学生的总成绩
	System.out.println("sum="+sum+"平均分="+(sum /5 ));

(2) 统计3个班(每个班5个学生) 平均分,在外层加个 for 循环 i,因为是每个班,都要计算一个班的学生总成绩和平均分,所以再外层嵌套一层 for 循环 3,最后在把输入的第几个班改为 第 i 个班即可

代码语言:javascript
复制
	Scanner sc = new Scanner(System.in);
	for (int i = 1;i <= 3;i++) {    //i表示班级
	    double sum = 0; //一个班的总成绩
	    for (int j = 1; j <= 5; j++) {  //j表示学生
	        System.out.println("请输入第"+i+"个班的第" + j + "个学生的成绩:");
	        double score = sc.nextDouble();
	        sum += score; //累积
	        System.out.println("成绩为:" + score);
	    }
	    //因为 sum 是5个学生的总成绩
	    System.out.println("sum=" + sum + "平均分=" + (sum / 5));
	}

(3) 所有班级的平均分

代码语言:javascript
复制
	3.1 定义一个变量,`double totalScore` 累积所有学生的成绩
	3.2 当多重循环结束后,`totalScore / (3 * 5)` 
代码语言:javascript
复制
	Scanner sc = new Scanner(System.in);
	double totalScore = 0;//累积所有学生的总成绩
	for (int i = 1;i <= 3;i++) {    //i表示班级
	    double sum = 0; //一个班的总成绩
	    for (int j = 1; j <= 5; j++) {  //j表示学生
	        System.out.println("请输入第"+i+"个班的第" + j + "个学生的成绩:");
	        double score = sc.nextDouble();
	        sum += score; //累积
	        System.out.println("成绩为:" + score);
	    }
	    //因为 sum 是5个学生的总成绩
	    System.out.println("sum=" + sum + "平均分=" + (sum / 5));
	    //把 sum 累积到 totalScore
	    totalScore += sum;
	}
	System.out.println("三个班总分"+totalScore+"平均分="+totalScore / 15);

(4) 统计三个班及格人数

代码语言:javascript
复制
	4.1 定义变量 int passNum = 0; 当有一个学生成绩>=60, passNum++
	4.2 如果 >= 60 passNum++
代码语言:javascript
复制
	Scanner sc = new Scanner(System.in);
	 double totalScore = 0;//累积所有学生的总成绩
	 int passNum = 0; //累积 及格人数
	 for (int i = 1;i <= 3;i++) {    //i表示班级
	     double sum = 0; //一个班的总成绩
	     for (int j = 1; j <= 5; j++) {  //j表示学生
	         System.out.println("请输入第"+i+"个班的第" + j + "个学生的成绩:");
	         double score = sc.nextDouble();
	         if (score >= 60){
	             passNum++;
	         }
	         sum += score; //累积
	         System.out.println("成绩为:" + score);
	     }
	     //因为 sum 是5个学生的总成绩
	     System.out.println("sum=" + sum + "平均分=" + (sum / 5));
	     //把 sum 累积到 totalScore
	     totalScore += sum;
	 }
	 System.out.println("三个班总分"+totalScore+"平均分="+totalScore / 15);
	 System.out.println("及格人数="+passNum);

(5) 可以优化[效率,可读性, 结构],班级人数和学生人数分别使用变量来替换

代码语言:javascript
复制
	Scanner sc = new Scanner(System.in);
    double totalScore = 0;//累积所有学生的总成绩
    int passNum = 0; //累积 及格人数
    int classNum = 3; //班级个数
    int stuNum = 5; //学生个数
    for (int i = 1;i <= classNum;i++) {    //i表示班级
        double sum = 0; //一个班的总成绩
        for (int j = 1; j <= stuNum; j++) {  //j表示学生
            System.out.println("请输入第"+i+"个班的第" + j + "个学生的成绩:");
            double score = sc.nextDouble();
            if (score >= 60){
                passNum++;
            }
            sum += score; //累积
            System.out.println("成绩为:" + score);
        }
        //因为 sum 是5个学生的总成绩
        System.out.println("sum=" + sum + "平均分=" + (sum / stuNum));
        //把 sum 累积到 totalScore
        totalScore += sum;
    }
    System.out.println("三个班总分"+totalScore+"平均分="+totalScore / classNum*stuNum);
    System.out.println("及格人数="+passNum);

(2) 统计三个班及格人数,每个班有 5 名同学。

(3) 打印出九九乘法表

代码语言:javascript
复制
	for	(int i = 1; i <= 9; i++){
		  for(int j = 1; j <= i; j++){
		  // "\t"这是JAVA语言默认的制表符号,使用此符号,打印出的乘法表格较为美观
		      System.out.print(" " + i + "*" + j + "=" + (i * j)+"\t");
		      if(i == j){
		          System.out.print("\n");//当换行条件成立时,进行换行打印
		      }
	  }

4. 经典的打印金字塔

  • 使用 for 循环完成下面的案例 请编写一个程序,可以接收一个整数,表示层数(totalLevel),打印出金字塔。(Stars.java) [化繁为简,先死后活]
  • 思路分析 化繁为简 1. 先打印一个矩形
代码语言:javascript
复制
	*****
	*****
	*****
	*****
	*****
代码语言:javascript
复制
  for (int i = 1; i <= 5; i++) {
            System.out.println("*****");
        }
  1. 打印半个金字塔
代码语言:javascript
复制
	*    	//第1层 有 1个*
	**   	//第2层 有 2个*
	***		//第3层 有 3个*
	****    //第4层 有 4个*
	*****   //第5层 有 5个*
代码语言:javascript
复制
	for (int i = 1; i <= 5; i++) {  // i 表示层数
		  // 控制打印每层的 * 个数
		  for (int j = 1; j <= i; j++) {
		      System.out.print("*");
		  }
		  // 每打印完一层 * 后,就换行
		  System.out.println("");
		}
  1. 打印整个金字塔
代码语言:javascript
复制
						     2 * 层数-1
	*       //第1层 有 1个*   2 * 1 -1   有4=(总层数-1)个空格
   ***      //第2层 有 3个*   2 * 2 -1   有3=(总层数-2)个空格
  *****     //第3层 有 5个*   2 * 3 -1   有2=(总层数-3)个空格
 *******    //第4层 有 7个*   2 * 4 -1   有1=(总层数-4)个空格
*********   //第5层 有 9个*   2 * 5 -1   有0=(总层数-5)个空格
代码语言:javascript
复制
	for (int i = 1; i <= 5; i++) {  // i 表示层数

	    //在输出*之前,还有输出 对应空格 = 总层数-当前层
	    for (int k = 1; k <= 5-i; k++){
	        System.out.print(" ");
	    }
	    
	    // 控制打印每层的 * 个数
	    for (int j = 1; j <= 2 * i - 1; j++) {
	        System.out.print("*");
	    }
	    
	    // 每打印完一层 * 后,就换行
	    System.out.println("");
	}
  1. 打印空心的金字塔 [最难的]
代码语言:javascript
复制
	*       //第1层 有 1个*   当前行的第一个位置是*,最后一个位置也是*
   * *      //第2层 有 2个*   当前行的第一个位置是*,最后一个位置也是*
  *   *     //第3层 有 2个*   当前行的第一个位置是*,最后一个位置也是*
 *     *    //第4层 有 2个*   当前行的第一个位置是*,最后一个位置也是*
*********   //第5层 有 9个*   全部输出*
代码语言:javascript
复制
	for (int i = 1; i <= 5; i++) {  // i 表示层数

	    //在输出*之前,还有输出 对应空格 = 总层数-当前层
	    for (int k = 1; k <= 5-i; k++){
	        System.out.print(" ");
	    }
	
	    // 控制打印每层的 * 个数
	    for (int j = 1; j <= 2 * i - 1; j++) {
	        //当前行的第一个位置是*,最后一个位置也是*,最后一层全部输出 *
	        if (j == 1 || j == 2 * i - 1 || i == 5){
	            System.out.print("*");
	        }else { //其他情况输出 空格
	            System.out.print(" ");
	        }
	    }
	
	    // 每打印完一层 * 后,就换行
	    System.out.println("");
	}
  1. 先死后活:5 层数做成变量 int totalLevel = 5;
  • 把 5 改成 10
代码语言:javascript
复制
		int totalLeavel = 10;
	    for (int i = 1; i <= totalLeavel; i++) {  // i 表示层数
	
	        //在输出*之前,还有输出 对应空格 = 总层数-当前层
	        for (int k = 1; k <= totalLeavel-i; k++){
	            System.out.print(" ");
	        }
	
	        // 控制打印每层的 * 个数
	        for (int j = 1; j <= 2 * i - 1; j++) {
	            //当前行的第一个位置是*,最后一个位置也是*,最后一层全部输出 *
	            if (j == 1 || j == 2 * i - 1 || i == totalLeavel){
	                System.out.print("*");
	            }else { //其他情况输出 空格
	                System.out.print(" ");
	            }
	        }
	
	        // 每打印完一层 * 后,就换行
	        System.out.println("");
	    }
	}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 多重循环控制
    • 1. 介绍
      • 2. 多重循环执行步骤分析:
        • 3. 应用实例:
          • 4. 经典的打印金字塔
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档