韩顺平Java入门第十一天
1.多重循环控制(难点! 重点!)
介绍
1) 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。 【建议一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差】
2) 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内 层循环,才可结束外层的当次循环,开始下一次的循环[听不懂,走案例]。
3) 设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。
多重循环执行步骤分析:
请分析 下面的多重循环执行步骤, 并写出输出 => 韩老师的内存分析法
//双层 for MulFor.java
for(int i = 0; i < 2; i++) {
//先思考
for( int j = 0; j < 3; j++) {
System.out.println(“i=” + i + j=" + j);
}
}
应用示例:
//1) 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。 、
//2) 统计三个班及格人数,每个班有 5 名同学。
//
import java.util.Scanner;
public class MulForExercise01 {
//编写一个 main 方法
public static void main(String[] args) {
//统计 3 个班成绩情况,每个班有 5 名同学,
//求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
//统计三个班及格人数,每个班有 5 名同学。
//思路分析:
//化繁为简
//(1) 先计算一个班 , 5 个学生的成绩和平均分 , 使用 for
//1.1 创建 Scanner 对象然后,接收用户输入
//1.2 得到该班级的平均分 , 定义一个 doubel sum 把该班级 5 个学生的成绩累积
//(2) 统计 3 个班(每个班 5 个学生) 平均分
//(3) 所有班级的平均分
//3.1 定义一个变量,double totalScore 累积所有学生的成绩
//3.2 当多重循环结束后,totalScore / (3 * 5) //
//(4) 统计三个班及格人数
//4.1 定义变量 int passNum = 0; 当有一个学生成绩>=60, passNum++
//4.2 如果 >= 60 passNum++
//(5) 可以优化[效率,可读性, 结构]
//创建 Scanner 对象
Scanner myScanner = 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 = myScanner.nextDouble();
//当有一个学生成绩>=60, passNum++
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);
}
}
//3) 打印出九九乘法表[课后题]
import java.util.Scanner;
public class MulForExercise02{
public static void main(String[] args){
//化繁为简
// for( int i = 1; i <= 9; i++) {
// //i 被乘数
// //
// for (int j = 1; j <= 9; j++ ) {
// //j乘数
// System.out.println(j+"*"+i+"=" + (j*i));
// }
// }
//打印格式不对重新编
for (int i = 1;i <= 9 ; i++) {
for (int j = 1;j <= i ;j++ ) {
System.out.print(j+"*"+i+"=" + (j*i) + "\t");
}
System.out.println(" ");
}
}
}
金字塔、空心金字塔
//金字塔
public class Stars{
public static void main(String[] args){
//int h = 5;
// for (int i = 1;i <= 5 ; i++) {
// for (int k = 1; k<= 5 - i ; k++) {
// System.out.print(" ");
// }
// for (int j = 1; j <= i -1 + i ;j++ ) {
// System.out.print("*");
// }
// System.out.println(" ");
// }
//空心金字塔
for (int i = 1;i <= 4 ; i++) {
// for (int k = 1; k<= 5 - i ; k++) {
// System.out.print(" ");
// }
for (int j = 1; j < i + 5 ;j++ ) {
if (j == 5 + 1 - i || j == 5 + i - 1) {
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println(" ");
if (i == 4) {
for (int k = 1; k<=9 ; k++) {
System.out.print("*");
}
}
}
}
}
空心菱形
//先死后活
空心菱形
///
import java.util.Scanner;
public class Stars03{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
//
//输入层数
System.out.println("请输入空心菱形层数(层数为奇数)");
int level = myScanner.nextInt();
int l = level + 1;
if (level % 2 == 1 ) {
//10
for (int i = 1;i <= l / 2 ; i++) {
for (int j = 1; j < i + l / 2 ;j++ ) {
if (j == l / 2 + 1- i || j == l / 2 - 1 + i ) {
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println(" ");
}
for (int m = 1;m <= l / 2 -1 ; m++) {
for (int n = 1; n <= l -1 - m ; n++ ) {
if (n == m + 1 || n == l- 1 - m ) { //
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println(" ");
}
}else{
System.out.println("提示!请输入空心菱形层数为奇数!");
}
}
}
------文章为自学笔记,学习的课程是B站上的韩顺平30天学JAVA,文章标题的天数是自己学习的天数-----