Java多重循环控制基本使用

网友投稿 575 2022-05-29

多重循环控制

1. 介绍

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

3. 应用实例:

4. 经典的打印金字塔

多重循环控制

1. 介绍

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

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

3. 应用实例:

4. 经典的打印金字塔

多重循环控制

1. 介绍

将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。

【建议一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差】

实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内

层循环,才可结束外层的当次循环,开始下一次的循环[听不懂,走案例]。

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

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

请分析 下面的多重循环执行步骤, 并写出输出 => 内存分析法

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) 先计算一个班 , 5个学生的成绩和平均分 , 使用for

1.1 创建 Scanner 对象然后,接收用户输入

1.2 得到该班级的平均分 , 定义一个 doubel sum 把该班级5个学生的成绩累积

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 个班即可

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) 所有班级的平均分

3.1 定义一个变量,`double totalScore` 累积所有学生的成绩 3.2 当多重循环结束后,`totalScore / (3 * 5)`

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) 统计三个班及格人数

4.1 定义变量 int passNum = 0; 当有一个学生成绩>=60, passNum++ 4.2 如果 >= 60 passNum++

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) 可以优化[效率,可读性, 结构],班级人数和学生人数分别使用变量来替换

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) 打印出九九乘法表

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. 先打印一个矩形

***** ***** ***** ***** *****

for (int i = 1; i <= 5; i++) { System.out.println("*****"); }

打印半个金字塔

* //第1层 有 1个* ** //第2层 有 2个* *** //第3层 有 3个* **** //第4层 有 4个* ***** //第5层 有 5个*

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

打印整个金字塔

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)个空格

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层 有 1个* 当前行的第一个位置是*,最后一个位置也是* * * //第2层 有 2个* 当前行的第一个位置是*,最后一个位置也是* * * //第3层 有 2个* 当前行的第一个位置是*,最后一个位置也是* * * //第4层 有 2个* 当前行的第一个位置是*,最后一个位置也是* ********* //第5层 有 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(""); }

先死后活:5 层数做成变量 int totalLevel = 5;

把 5 改成 10

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(""); } }

Java

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux系统编程-进程间通信(mmap内存映射)
下一篇:VB程序设计前六章整理
相关文章