多重循环控制
- 多重循环控制
- 练习
多重循环控制
1.将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do…while均可以作为外层循环和内层循环。【建议一般用两层,最多不要超过3层,否则代码的可读性很差】
2.实际上,嵌套循环就是把内存循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内存循环,才可结束外层的当次循环,开始下一次的循环。
3.设外层循环次数为m次,内存为n次,则内层循环体实际上需要执行m*n次。
for(int i = 1; i <= 7; i++){ //循环7次for(int j = 1; j <= 2; j++){ //循环2次System.out.println("ok"); //循环7*2=14次}
}
练习
统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分,并统计三个班及格人数
import java.util.Scanner;
public class ForTest{public static void main(String[] args){// 统计3个班成绩情况,每个班有5名同学,// 求出各个班的平均分和所有班级的平均分,// 并统计三个班及格人数// 1.化繁为简,先统计1个班成绩情况// 2.Scanner键盘输入,double score接收键盘输入// 3.for循环嵌套,执行三次(统计1个班成绩情况),用sum接收每个班总分,每次结束清零// 4.用total_score来接收三个班总分// 5.int count = 0;统计及格人数Scanner sc = new Scanner(System.in);double total_score = 0; //收集三个班的总分int count = 0;for(int i = 1;i <= 3; i++){double sum = 0;for(int j = 1; j <= 5; j++){ //统计一个班的五名同学成绩,j表示同学System.out.println("请输入" + i + "班第" + j +"名同学成绩:");double score = sc.nextDouble();System.out.println(i + "班第"+ j + "名同学成绩为:" + score + "\n");if(score >= 60){count++;}sum +=score; //求一个班的总分,每次结束内层循环自动清零double sum = 0;total_score +=score;}System.out.println(i + "班总分为:" + sum + "平均分为:" + (sum / 5)); //输出一个班的总分和平均分}System.out.println("三个班的总分为:" + total_score +"平均分为:" + (total_score / 15));System.out.println("及格人数为:" + count);}
}
打印金字塔
import java.util.Scanner;
public class ForTest{public static void main(String[] args){/*打印****************/ //化繁为简先打印出/****** 5行5列矩形*********************///进一步打印出半个金字塔/*i表示行数* 第1行,1个*** 第2行,2个**** 第3行,3个***** 第4行,4个****** 第5行,5个**///打印整个金字塔/** 第1行,(2*i)-1=1个* 前有4个空格 (总行数5 - i)个空格*** 第2行,(2*i)-1=3个* 前有3个空格***** 第3行,(2*i)-1=5个* 前有2个空格******* 第4行,(2*i)-1=7个* 前有1个空格********* 第5行,(2*i)-1=9个* 前有0个空格 *///打印镂空金字塔/** 第1行,1个* 前有(总行数5 - i)=4个空格 * * 第2行,2个* 前有3个空格* * 第3行,2个* 前有2个空格* * 第4行,2个* 前有1个空格********* 第5行,9个* 前有0个空格首尾都是*,中间为空*/Scanner sc = new Scanner(System.in);System.out.println("请输入行数(整数):");int total_hang = sc.nextInt();for(int i = 1;i <= total_hang;i++){ //i表示行数//控制打印每层*的个数for(int k = 1;k <= (total_hang - i);k++){ //空格的位置System.out.print(" ");}for(int j = 1;j <=2 * i - 1;j++){ //j表示*的第几个位置if(j == 1 || j == 2 * i - 1 || i == total_hang){System.out.print("*");}else{System.out.print(" ");}}//每打印完一层*就换行System.out.println("");}}
}
打印九九乘法表
public class test{public static void main(String[] args){for(int i = 1;i <= 9;i++){ //i表示行数for(int j = 1; j <= i;j++){System.out.print(i + "*" + j + "=" + i * j + "\t");}//打印完自动换行System.out.println(""); }}
}