java: 5-5多重循环


【老韩b站视频p133-136】

1. 多重循环【重难点】

1.1 什么是多重循环

  1. 将一个循环放在另一个循环里面,就形成了嵌套循环。【老韩建议一般使用2层,最多不要超过 3 层。否则,可读性很差】
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的外层循环。
  3. 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次
    请添加图片描述

1.2 步骤分析(老韩的内存分析法)

请分析下面的多重循环执行步骤, 并写出输出 => 韩老师的内存分析法
请添加图片描述

1.3 应用练习

  1. 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
  2. 统计三个班及格人数,每个班有5名同学。
  3. 打印出九九乘法表。
    【化繁为简,缝缝补补,先死后活】
public class MulFor {
	public static void main(String[] args) {
		//1. 统计3个班成绩情况,每个班有5名同学
		//求出各个班的平均分和所有班级的平均分。
		//2. 统计三个班及格人数,每个班有5名同学。
		//
		//思路:
		//(1)先计算一个班,5个学生的成绩和平均分。
		//1.1 创建一个Scanner对象来接收用户输入。
		//1.2 计算平均分,需要sum
		//(2)统计3个班(每个班5个学生)的平均分。
		//(3) 计算所有班级的平均分,定义double来累积所欲学生的成绩。
		//(4)统计3个班的几个人数
		//定义一个变量,int passNum = 0;>= 60,就++。【接收成绩就马上判断】
		Scanner myScanner = new Scanner(System.in);
		double totalSum = 0; //3个班级总分数
		int passNum = 0; //累计及格人数
		int classNum = 3; //班级数
		int stdNum = 5; //学生数
		for(int i = 1; i <= classNum; i++){
			//i表示班级,j表示学生。
			double sum = 0; //每个班的总分。
			for(int j = 1; j <= stdNum; j++){//5个学生
				System.out.println("请输入第1个班的第" + j + "个学生的成绩");
				double score = myScanner.nextDouble();
				//成绩输入进来就马上判断,是否>= 60
				if(score >= 60){
					passNum++;
				}
				sum += score;
				System.out.println("成绩为" + score);
			}
			totalSum += sum;
			System.out.println("sum=" + sum + "平均分" + (sum / stdNum));
		}
		System.out.println("totalSum=" + totalSum + "总平均分=" + (totalSum / (classNum * stdNum)));
		System.out.println("及格人数=" + passNum);


		//3. 打印出九九乘法表。
		//打印1-9
		for(int i = 1; i <= 9; i++){
			for(int j = 1; j <= i; j++){
				System.out.println(j + "*" + i + "=" + (i * j));
			}
		}


	}
} 

请添加图片描述

1.4 经典案例 - 打印金字塔

  • 请编写一个程序,可以接收一个整数,表示层数(totalLevel),打印出金字塔【用for循环】。
  • 注意⚠️:
    1. System.out.print()里的print不写ln表示不换行,写了表示print完就换行。
    2. System.out.print(“\n”) == System.out.println()。因为println打印完本身就会换行。
public class Stars {
	public static void main(String[] args) {
		//请编写一个程序,可以接收一个整数,表示层数(totalLevel),
		//打印出金字塔【用for循环】。
		/*
		思路分析:
		化繁为简
		1. 先打印一个矩形5*5
		*****
		*****
		*****
		*****
		*****
		2. 打印半个金字塔。
		*
		**
		***
		****
		*****
		3. 打印整个实心金字塔【2n - 1】
		要考虑空格
   	  * 		//第1层有1个*   【4个空格】(总层数 - 1)
	 *** 		//第2层有3个*   【3个空格】(总层数 - 2)
	*****		//第3层有5个*   【2个空格】(总层数 - 3)
   ******* 		//第4层有7个*   【1个空格】(总层数 - 4)
  ********* 	//第5层有9个*   【0个空格】(总层数 - 5)
  		4. 打印空心金字塔
   	  * 		//第1层有1个*   【当前行的第一个位置是*,最后一个位置也是*】
	 * * 		//第2层有2个*   【当前行的第一个位置是*,最后一个位置也是*】
	*   *		//第3层有2个*   【当前行的第一个位置是*,最后一个位置也是*】
   *     * 		//第4层有2个*   【当前行的第一个位置是*,最后一个位置也是*】
  *********  	//第5层有2个*   【全部输出】
		5. 先死后活
		常数 ---> 变量
		
		*/
		
		int totallevel = 5;
		for(int i = 1; i <= totallevel; i++){ //i表示层数
			//输出*之前要输出,输出每行的空格。
			for(int k = 1; k <= totallevel-i; k++){
				System.out.print(" ");
			}
			//输出每行的*
			for(int j = 1; j<= 2 * i - 1; j++){ //j表示每层的个数
				//当前行的第一个位置是*,最后一个位置也是*。最后一层全部输出
				if(j == 1 || j == 2 * i - 1 || i == totallevel){
					System.out.print("*"); //这里print不写ln表示不换行,写了表示print完就换行。
				}else{//其他情况输出空格
					System.out.print(" "); 
				}
			}
			//每打完一层的*,就换行。
			System.out.println();// println本身打印完就会换行。
			//或者写System.out.print("\n");也行。
		}
		
	}
} 

请添加图片描述

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值