Java基础16[多重循环控制(难点)]

多重循环控制(难点)

(1)介绍:
1.将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do…while均可以作为外层循环和内层循环。【建议一般使用两层,最多不要超过3层,否则代码可读性很差】

2.实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可以结束外层的当次循环,开始下一次的循环。

3.设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

for(int i=1;i<=7;i++){
  for(int j=1;j<=2;j++){
      System.out.println("ok"); //7*2=14
     }
  }  

(2)多重循环控制案例1:
1.1)统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生的成绩从键盘输入】
1.2)统计三个半及格人数,每个人有5名同学。
2)打印出九九乘法表

思路分析:

//化繁为简
//(1)先计算一个班,5个学生的成绩,使用for
//1.1创建Scanner对象然后,接收用户输入
//1.2得到该班级的平均分
Scanner sc = new Scanner(System.in);
		double sum=0;    //一个班级的总分
		   for(int j=0;j<=4;j++){  
			   System.out.println("第"+(j+1)+"名同学的成绩为:");
			   double score = sc.nextDouble();
			   sum+=score;  //累积
             }
		   //因为sum是5个学生的总成绩
		System.out.println("sum="+sum+"平均分="+(sum/5));
	}
//(2)统计3个班(每个班5名学生)平均分
   for(int i=0;i<=2;i++){     //i表示班级
//(3)所有班级的平均分
//3.1定义一个变量,double totalScore 累积所有学生的成绩
double totalScore =0;   //累积所有学生的成绩
totalScore+=sum;     //把sum累积到totalScore
//3.2当多重循环结束后,totalScore/(3*5)
 System.out.println("三个班总分="+totalScore+"平均分="+totalScore/15);
 //(4)统计三个班及格人数
 //4.1定义变量 int passNum=0; 当有一个学生成绩>=60,passNum++
 统计3个班成绩情况,每个班有5名同学,
 //4.2如果 >=60 passNum++
  if(score >=60){
				   passNum++;
			   }

代码实现:

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		double sum=0;    //一个班级的总分
		double totalScore =0;   //累积所有学生的成绩
		int passNum=0;   //累积 及格人数
		int classNum=3;  //班级个数
		int stuNum=5;    //学生个数
		for(int i=1;i<=classNum;i++){     //i表示班级
		   for(int j=1;j<=stuNum;j++){  //j表示学生
			   System.out.println("请输入第"+i+"个班第"+j+"名同学的成绩为:");
			   double score = sc.nextDouble();
			   //当有一个学生成绩>=60,passNum++
			   if(score >=60){
				   passNum++;
			   }
			   sum+=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);
}

分开求解的代码实现:
1.1)统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生的成绩从键盘输入】

	Scanner sc = new Scanner(System.in);
		
		int arr[]= new int[15];
		int zong=0;
		int sum=0;
		for(int i=0;i<=2;i++){     //3个班
		   for(int j=0;j<=4;j++){  //每个班5名同学
			   System.out.println("第"+(j+1)+"名同学的成绩为:");
             arr[j]=sc.nextInt();
             sum=sum+arr[j];
		}
		   sum=sum/5;
		   System.out.println("第"+(i+1)+"个班的平均分为:"+sum);
		   zong = zong+sum;
	}
		zong = zong/3/5;
		System.out.println("所有班级的平均分为:"+zong);
	}

1.2)统计3个班成绩情况,每个班有5名同学,求所有班级的及格人数

public static void main(String[] args) {

		
		Scanner sc = new Scanner(System.in);
		
		int arr[]= new int[15];
		int jige=0;
		for(int i=0;i<=2;i++){     //3个班
		   for(int j=0;j<=4;j++){  //每个班5名同学
			   System.out.println("第"+(i+1)+"个班第"+(j+1)+"名同学的成绩为:");
             arr[j]=sc.nextInt();
             if(arr[j]>=60){
            	 jige++;
             }
		   }
	}
		System.out.println("所有班级的及格人数为:"+jige);
	}

2)打印九九乘法表代码实现:

public static void main(String[] args) {
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				System.out.print(i+"+"+j+"="+i*j+" ");
			}
			System.out.println();
		}
	}

(3)多重循环控制案例2:
经典的打印金字塔
使用for循环完成下面的案例:
请编写一个程序,可以接收一个整数,表示层数(totalLevel),打印出金字塔。
在这里插入图片描述
1)完成思路,可以先从矩形开始打
2)实现代码
3)用while实现

思路分析:

化繁为简

1.先打印一个矩形
*****
*****
*****
*****
*****

实现:
for(int i=1;i<=6;i++){
	for(int j=1;j<=5;j++){
		System.out.print("*");
	}
		System.out.println();
 }


2.打印半个金字塔
*      //第一层 1个*
**     //第二层 2个*
***    //第三层 3个*
****   //第四层 4个*
*****  //第五层 5个*

实现:
  for(int i=1;i<=5;i++){      //i表示层数
	 for(int j=1;j<=i;j++){  //控制打印每层*的个数
	    System.out.print("*");
	 }
		System.out.println();  //每打印完一层的*后,就换行
 }

3.打印整个金字塔
    *      //第一层 1个*    2 * 1 - 1  有4=(总层数-1)个空格
   ***     //第二层 3个*    2 * 2 - 1  有3=(总层数-2)个空格
  *****    //第三层 5个*    2 * 3 - 1  有2=(总层数-3)个空格
 *******   //第四层 7个*    2 * 4 - 1  有1=(总层数-4)个空格
*********  //第五层 9个*    2 * 5 - 1  有0=(总层数-5)个空格

实现: 
   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();
 }

4.打印空心的金字塔 [难点]
    *      //第一层 1个*   当前行的第一个位置是 *,最后一个位置也是 *
   * *     //第二层 2个*   
  *   *    //第三层 2个*    
 *     *   //第四层 2个*    
*********  //第五层 9个*    

实现:
 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();
	}

先死后活
 层数变成变量 int totalLevel = 5; 
 实现:
 	public static void main(String[] args) {
	  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++){   //控制打印每层*的个数
		  //当前行的第一个位置是 *,最后一个位置也是 *,最后一层全部 *
			  if(j ==1 || j == 2 * i - 1 || i == totalLevel ){
				 System.out.print("*");
			  }else{
				 System.out.print(" ");
					}
				}
				 System.out.println();
			}
		}

代码实现:

public static void main(String[] args) {
  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++){   //控制打印每层*的个数
	  //当前行的第一个位置是 *,最后一个位置也是 *,最后一层全部 *
		  if(j ==1 || j == 2 * i - 1 || i == totalLevel ){
			 System.out.print("*");
		  }else{
			 System.out.print(" ");
				}
			}
			 System.out.println();
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值