多重循环控制
- 多重循环控制
- 练习
多重循环控制
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("");
}
}
}