JAVA基础-U5程序控制结构-多重循环控制流程

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

    for(int i = 0; i < 2; i++){
        for(int j = 0; j < 3; j++){
            System.out.println("i = " + i + ", j = " + j);
        }
    }
    
    i = 0, j = 0
    i = 0, j = 1
    i = 0, j = 2
    i = 1, j = 0
    i = 1, j = 1
    i = 1, j = 2
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KZrNPOV-1682504434694)(C:/Users/苏逸云/AppData/Roaming/Typora/typora-user-images/image-20230424171842118.png)]

  • 练习

    1. 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分(从键盘输入学生成绩)
    2. 统计3个班及格人数,每个班有5名同学
    3. 打印出九九乘法表
import java.util.Scanner;

public class MulForExercise01{

	public static void main(String[] args) {

		/*1. 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分(从键盘输入学生成绩)
		2. 统计3个班及格人数,每个班有5名同学*/

		//1.
		Scanner myScanner = new Scanner(System.in);

		double allSum = 0;
		int classNum = 3;
		int stuNum = 5;
		double passScore = 60.0;

		for (int i = 1; i <= classNum ; i++ ) {
			System.out.println("请您输入 " + i +" 班的学生成绩:");
			double sum = 0;
			int passNum = 0;
			//输入学生成绩
			for (int j = 0; j < stuNum ; j++ ) {
				double stu = myScanner.nextDouble();
				sum += stu;
				if(stu >= passScore){
					passNum += 1;
				}
			}
			allSum += sum;
			double averageClass = sum / stuNum;
			System.out.println(i +  " 班的平均分为 " + averageClass + " 分");
			System.out.println(i +  " 班的及格人数为 " + passNum + " 个");
		}

		double averageAll = allSum / (stuNum * classNum);
		System.out.println("年级的平均分为 " + averageAll + " 分");
	}
}
public class MulForExercise02{

	public static void main(String[] args) {

		// 3. 打印出九九乘法表
		for (int i = 1; i <= 9 ; i++ ) {
			for (int j = 1; j <= 9 ; j++ ) {
				//横着打印
				//j快,所以是j * i ,按理说要打印81行,用j<=i节省一半重复打印
				if (j <= i) {
					System.out.print(j + " x " + i + " = " + i*j + "\t");
					//当ji相等时,换行
					if (j == i) {
						System.out.print("\n");
					}
				}
				
				
			}

		}

		//不知道怎么做出九排九列的效果?
		//一个Systme.out默认是换行,不知道怎么把两个式子连起来
		//解答:println是换行,想要横着加起来用print

	}
}

在这里插入图片描述

  1. 编写一个程序,可以接受一个整数表示层数(totalLevel),打印出空心金字塔。
import java.util.Scanner;

public class MulForExercise03{

	public static void main(String[] args) {

		//编写一个程序,可以接受一个整数表示层数(totalLevel),打印出空心金字塔。
		Scanner myScanner = new Scanner(System.in);

		System.out.println("请输入层数:");
		int totalLevel = myScanner.nextInt();

		//金字塔雏形
		for (int i = 1; i <= totalLevel ; i++ ) {
			for (int j = 1; j <= i ; j++ ) {
				System.out.print("*");
			}
			System.out.print("\n");
		}

		//普通金字塔
		for (int i = 1; i <= totalLevel ; i++ ) {
			//前面的空格,遵守total - i 个
			int q = totalLevel - i;
			for (int p = 1; p <= q ; p++ ) {
				System.out.print(" ");
			}
			//*号,遵守2i - 1
			for (int j = 1; j <= (2 * i - 1 ) ; j++ ) {
				System.out.print("*");
			}
			System.out.print("\n");
		}

		//空心金字塔(勤勤恳恳复杂版)
		for (int i = 1; i <= totalLevel ; i++ ) {
			//前面的空格,遵守total - i 个
			int q = totalLevel - i;
			for (int p = 1; p <= q ; p++ ) {
				System.out.print(" ");
			}
			//第一个*
			System.out.print("*");
			//中间
			if (i > 1 && !(i == totalLevel)) {
				//中间的空格 2(i-1)-1 = 2i-3
				for (int k = 1 ;k <= (2 * i - 3) ; k++) {
					System.out.print(" ");
				}
				System.out.print("*");
			}
			//最后一行
			if (i == totalLevel) {
				//*号,遵守2i - 1,再减一是减去第一个*
				for (int j = 1; j <= (2 * i - 1 )-1 ; j++ ) {
					System.out.print("*");
				}
			}
			
			System.out.print("\n");
		}

		//空心金字塔(举一反三灵活版)
		for (int i = 1; i <= totalLevel ; i++ ) {
			//前面的空格,遵守total - i 个
			int q = totalLevel - i;
			for (int p = 1; p <= q ; p++ ) {
				System.out.print(" ");
			}
			//*号,遵守2i - 1
			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.print("\n");
		}

	}
}


请输入层数:
5
*
**
***
****
*****
    *
   ***
  *****
 *******
*********
    *
   * *
  *   *
 *     *
*********
    *
   * *
  *   *
 *     *
*********
  1. 编写一个程序,打印出空心菱形
import java.util.Scanner;

public class MulForExercise04{

	public static void main(String[] args) {

		//编写一个程序,可以接受一个整数表示层数(totalLevel),打印出空心菱形。
		Scanner myScanner = new Scanner(System.in);

		System.out.println("请输入层数:");
		int totalLevel = myScanner.nextInt();

		//空心菱形
		for (int i = 1; i <= totalLevel ; i++ ) {

			//上面的三角形,空心三角形
			if (i <= (totalLevel + 1) / 2) {
				//前面的空格,遵守total - i 个
				int q = totalLevel - i;
				for (int p = 1; p <= q ; p++ ) {
					System.out.print(" ");
				}
				//*号,遵守2i - 1
				for (int j = 1; j <= (2 * i - 1) ; j++ ) {
					//每行的第一个字符和最后一个字符
					if(j == 1 || j == (2 * i - 1)){
						System.out.print("*");
					}else{
						System.out.print(" ");
					}
				}
				System.out.print("\n");
			}else{//下面的空心三角
				//用k = (totalLevel + 1) % i把下面的层数和上面的层数联系起来
				if ((totalLevel + 1) % i != 0){
					int k = (totalLevel + 1) % i;
					//前面的空格,遵守total - i 个
					int q = totalLevel - k;
					for (int p = 1; p <= q ; p++ ) {
						System.out.print(" ");
					}
					//*号,遵守2i - 1
					for (int j = 1; j <= (2 * k - 1) ; j++ ) {
						//每行的第一个字符和最后一个字符
						if(j == 1 || j == (2 * k - 1)){
							System.out.print("*");
						}else{
							System.out.print(" ");
						}
					}
					System.out.print("\n");
				}
			}	
		}

	}
}

请输入层数:
10
         *
        * *
       *   *
      *     *
     *       *
     *       *
      *     *
       *   *
        * *
         *
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值