多重循环(难点!重点!)
介绍
- 将一个循环放在另一个循环体内, 就形成了嵌套循环.其中, for、while、do...while均可作为内层循环和外层循[建议一般使用两层,最多不要超过3层,否则代码的可读性很差]
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体.当只有内层循环的循环条件为false时,才会完全跳出内层循环,才🉑️结束外层的当次循环,开始下一次的循环
- 设外层循环次数为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次 } }
多重循环练习题
1、统计三个班成绩情况,每个班有5个同学,求出各个班的平均分和所有班级的平均分并统计出三个班的及格人数
import java.util.Scanner; public class multipleFor{ public static void main(String[] args) { //1、统计三个班成绩情况,每个班有5个同学,求出各个班的平均分和所有班级的平均分 //2、统计三个班及及格人数,每个班有5个同学 //3、统计三个班及格人数 //思路分析: //1、先算出一个班的总分 //2、算出各个班的平均分 //3、算出所有班级的总分 //4、算出所有班级的平均分 //5、定义一个 int passNum 表示及格人数, //6、如果分数 >= 60,则 passNum ++; double sum_score = 0; int cla_num = 3; int stu_num = 5; int passNum = 0; for (int i = 1 ; i <= cla_num ; i++ ) { double sum = 0; //每个班的总分 for (int j = 1; j <= stu_num ; j++ ) { Scanner MyScanner = new Scanner(System.in); System.out.println("请输入第" + i + "个班第" + j + "个同学的成绩:"); double score = MyScanner.nextDouble(); if (score >= 60) { passNum ++; } //每个班的总分 sum += score; } System.out.println("总分:"+ sum + "\n" + "平均分:" + sum / stu_num ); sum_score += sum; } System.out.println("所有班级的总分:" + sum_score + "所有班级的平均分:" + sum_score / (cla_num * stu_num)); System.out.println("三个班的及格人数为:" + passNum); } }
3、打印出九九乘法表
import java.util.Scanner; public class multipleFor{ public static void main(String[] args) { //打印99乘法表 for (int i = 1 ; i <= 9 ; i++ ) { for (int j = 1; j <= i ; j++ ) { System.out.println(i + " * " + j + " = " + i * j + "\t"); } System.out.println(); } } }
3、使用for循环打印出空心金字塔
编写一个程序,可以接受一个整数,表示层数(totalLevel),打印出金字塔
import java.util.Scanner; public class multipleFor{ // 第一个图形 public static void main(String[] args) { for (int i = 1 ; i <= 5 ; i++ ) { for(int j = 1 ; j <= i; j++){ System.out.print("*"); } System.out.println(); } } }
import java.util.Scanner; public class multipleFor{ // 第二个图形 public static void main(String[] args) { for (int i = 1 ; i <= 5 ; i++ ) { int totalLevel = 5; for (int k = 1; k <= totalLevel - i ; k++ ) { System.out.print(" "); } for(int j = 1 ; j <= 2 * i - 1; j++){ System.out.print("*"); } System.out.println(); } } }
import java.util.Scanner; public class multipleFor{ /* 打印半个金字塔 * //第一层 有 1个 * ** //第二层 有 2个 * *** //第三层 有 3个 * **** //第四层 有 4个 * ***** //第五层 有 5个 * 打印整个金字塔 * //第1层 有 1个 * 2 * 层数 -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)个空格 打印空心金字塔 * //第1层 有 1个 * 当前行的第一个位置是*, 最后一个位置也是* * * //第2层 有 2个 * 当前行的第一个位置是*, 最后一个位置也是* * * //第3层 有 2个 * 当前行的第一个位置是*, 最后一个位置也是* * * //第4层 有 3个 * 当前行的第一个位置是*, 最后一个位置也是* ********* //第5层 有 9个 * 全部输出* 先死后活 层数做成变量 int totalLevel = 5; */ public static void main(String[] args) { int totalLevel = 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++ ) { // 当前行的第一个位置是*,最后一个位置也是*,最后一层全部 * if (j == 1 || j ==2 * i - 1 || i == 5) { System.out.print("*"); } else{ System.out.print(" "); } } //打印完每一层的 * 后,就换行 System.out.println(" "); } } }