目录
对百分制成绩评定等级
(100, +∞):超出范围
[90, 100]:优秀
[80, 90):良好
[70, 80):中等
[60, 70):及格
[0, 60):不及格
(-∞, 0):超出范围
(一)编程实现
方法一、采用并列式多分支结构评定成绩等级
思路:有多少种情况,就并列写多少个单分支,分支之间相互独立
第1个分数段:
s
c
o
r
e
>
100
,
s
c
o
r
e
∈
(
100
,
+
∞
)
score>100,score\in(100,+\infty)
score>100,score∈(100,+∞) -超出范围
-
第2个分数段: 90 ≤ s c o r e ≤ 100 , s c o r e ∈ [ 90 , 100 ] 90\le score \le 100,score\in[90,100] 90≤score≤100,score∈[90,100] -优秀
-
第3个分数段: 80 ≤ s c o r e < 90 , s c o r e ∈ [ 80 , 90 ) 80\le score\lt 90,score\in[80,90) 80≤score<90,score∈[80,90) -良好
-
第4个分数段: 70 ≤ s c o r e < 80 , s c o r e ∈ [ 70 , 80 ) 70\le score\lt 80,score\in[70,80) 70≤score<80,score∈[70,80) -中等
-
第5个分数段: 60 ≤ s c o r e < 70 , s c o r e ∈ [ 60 , 70 ) 60\le score\lt 70,score\in[60,70) 60≤score<70,score∈[60,70) -及格
-
第6个分数段: 0 ≤ s c o r e < 60 , s c o r e ∈ [ 0 , 60 ) 0\le score\lt 60,score\in[0,60) 0≤score<60,score∈[0,60) -不及格
-
第7个分数段: s c o r e < 0 , s c o r e ∈ [ − ∞ , 0 ) score\lt 0,score\in[-\infty,0) score<0,score∈[−∞,0) - 超出范围
-
在net.yangxinying.p02.t03创建Task03_1
package net.yangxinying.p02.t03;
import java.util.Scanner;
/**
* 功能:采用并列式多分支结构评定成绩等级
* 作者:杨鑫莹
* 日期:2022年03月31日
*/
public class Task03_1 {
public static void main(String[] args) {
//声明部分
int score;
String level;
Scanner sc = new Scanner(System.in);
//输入部分
System.out.print("score = ");
score = sc.nextInt();
//处理部分
level = "";
if (score > 100) level = "超出范围";
if (score >= 90 && score <= 100) level = "优秀";
if (score >= 80 && score <= 90) level = "良好";
if (score >= 70 && score <= 80) level = "中等" ;
if (score >= 60 && score <= 70) level = "及格";
if (score >= 0 && score <= 60) level = "不及格";
if (score < 100) level = "超出范围";
//输出部分
System.out.println(level);
}
}
-
要注意level:局部变量必须初始化,否则会报错
-
怎么解决这个问题呢?很简单,在处理部分之前将level初始化为空字符串(Alt + shift + enter)
-
运行结果
-
总结:并列式多分支结构,优点是易于理解,但缺点是效率低(思考一下,为什么效率低)。
-
其实,这个程序可以作点优化,因为成绩大于100分或小于0分都是超出范围,所以可以将这两个并列的分之合而为一
方法二、采用嵌套式多分支结构评定成绩等级
思路1、从高分到低分来划分各个分数段
- 在net.yangxinying.p02.t03包里创建Task03_2类
package net.yangxinying.p02.t03;
import java.util.Scanner;
/**
* 功能:成绩等级评定
* 作者:杨鑫莹
* 日期:2022年03月31日
*/
public class Task03_2 {
public static void main(String[] args) {
// 声明部分
int score;
String level;
Scanner sc = new Scanner(System.in);
// 输入部分
System.out.print("score = ");
score = sc.nextInt();
// 处理部分
level = "";
if (score > 100) {
level = "超出范围";
} else {
if (score >= 90) {
level = "优秀";
} else {
if (score >= 80) {
level = "良好";
} else {
if (score >= 70) {
level = "中等";
} else {
if (score >= 60) {
level = "及格";
} else {
if (score >= 0) {
level = "不及格";
} else {
level = "超出范围";
}
}
}
}
}
}
// 输出部分
System.out.println(level);
}
}
- 运行程序,查看结果(测试七种情况
思路2、从低分到高分来划分各个分数段
- 在net.yangxinying.p02.t03包里创建Task03_2_类
- 总结:嵌套式多分支结构,优点是层次分明、效率高,但缺点是嵌套层次太多时显得很繁
方法三、采用延拓式多分支结构评定成绩等级
思路1:从高分到低分来划分各个分数段
- 在net.yangxinying.p02.t03包里创建Task03_3类
package net.yangxinying.p02.t03;
import java.util.Scanner;
/**
* 功能:采用延拓式多分支结构评定成绩等级
* 作者:杨鑫莹
* 日期:2022年04月07日
*/
public class Task03_3 {
public static void main(String[] args) {
//声明部分
int score;
String level;
Scanner sc = new Scanner(System.in);
//输入部分
System.out.print("score = ");
score = sc.nextInt();
//处理部分
level = "";
if (score > 100) {
level = "超出范围";
} else if (score >= 90) {
level = "优秀";
} else if (score >= 80) {
level = "良好";
} else if (score >= 70) {
level = "中等";
} else if (score >= 60) {
level = "及格";
} else if (score >= 0) {
level = "不及格";
} else {
level = "超出范围";
}
//输出部分
System.out.println(level);
}
}
思路2、从低分到高分来划分各个分数段
- 在net.yangxinying.p02.t03包里创建Task03_3_类
package net.yangxinying.p02.t03;
import java.util.Scanner;
/**
* 功能:采用延拓式多分支结构评定成绩等级
* 作者:杨鑫莹
* 日期:2022年04月07日
*/
public class Task03_3_ {
public static void main(String[] args) {
// 声明部分
int score;
String level;
Scanner sc = new Scanner(System.in);
// 输入部分
System.out.print("score = ");
score = sc.nextInt();
// 处理部分
level = "";
if (score < 0) {
level = "超出范围";
} else if (score < 60) {
level = "不及格";
} else if (score < 70) {
level = "及格";
} else if (score < 80) {
level = "中等";
} else if (score < 90) {
level = "良好";
} else if (score <= 100) {
level = "优秀";
} else {
level = "超出范围";
}
// 输出部分
System.out.println(level);
}
}
总结:延拓式多分支结构,优点是只有一层,并且效率高。希望同学们务必掌握这一种多分支处理方式。
方法四、采用开关式多分支结构评定成绩等级
- 关键点在于将成绩变量整除10,以便将各个分数段转换成离散的整数值,这样才能用开关式多分支结构来进行处理。
- 在net.huawei.p02.t03包里创建Task03_4类
package net.yangxinying.p02.t03;
import java.util.Scanner;
/**
* 功能:
* 作者:杨鑫莹
* 日期:2022年04月07日
*/
public class Task03_4 {
public static void main(String[] args) {
//声明部分
int score;
String level;
Scanner sc = new Scanner(System.in);
//输入部分
System.out.print("score = ");
score = sc.nextInt();
//处理部分
level = "";
if (score < 0 || score > 100) {
level = "超出范围";
}else {
switch (score / 10) {
case 10:
case 9:
level = "优秀";
break;
case 8:
level = "良好";
break;
case 7:
level = "中等";
break;
case 6:
level = "及格";
break;
default:
level = "不及格";
}
}
//输出部分
System.out.println(level);
}
}
- 总结:开关式多分支结构,优点是书写简洁,并且效率高,但缺点是只能针对离散型的情况进行处理。开关式多分支结构里的测试表达式,类型可以是整数、字符、甚至可以是字符串。
(二)讲解知识点
详细讲稿: Java学习笔记2.4.3 选择结构 - 多分支结构
多分支结构可有四种处理方式:并列式、嵌套式、延拓式、开关式
1、并列式多分支结构
if (条件1) {
语句组1
}
if (条件2) {
语句组2
}
……
if (条件n) {
语句组n
}
2、嵌套式多分支结构
if (条件) {
if (条件1) {
语句组1
} else {
……
}
} else {
if (条件2) {
语句组2
} else {
……
}
}
3、延拓式多分支结构
if (条件1) {
语句组1
} else if (条件2) {
语句组2
}
……
} else if (条件n) {
语句组n
} else {
语句组n+1
}
4、开关式多分支结构
switch (测试表达式) {
case 值1:
语句组1
break;
case 值2:
语句组2
break;
……
case 值n:
语句组n
break;
default:
语句组n+1
}