java成绩评定系统用switch实现等级转换,需先将百分制分数整数化(如score/10取整或100单独处理),再用switch匹配离散等级值,因switch不支持浮点数和范围判断。

Java 成绩评定系统用 switch 实现,核心是把百分制分数转换为等级(如 A、B、C、D、F),但要注意:switch 不能直接对浮点数或范围做判断,必须先将分数映射为离散值(如整数等级)。常见做法是用分数除以 10 取整(如 85 → 8),再用 switch 处理 0–10 的整数分支。
用分数段整数化 + switch 判定等级
由于 switch 只支持 byte、short、int、char、String 和 enum,不能写 case >=90: 这种语法,所以需预处理:
- 将原始分数(如 double score = 87.5)转为 int,再除以 10 取整:
int gradeLevel = (int) score / 10; - 这样 90–99 得 9,80–89 得 8,…,0–9 得 0;100 分单独处理(因为 100/10=10)
- switch 对 gradeLevel 值进行匹配,每个 case 返回对应等级字符串
完整可运行示例代码
以下是一个简洁实用的实现:
public class GradeSystem {
public static String getGrade(double score) {
if (score 100) {
return "无效分数";
}
int level;
if (score == 100) {
level = 10;
} else {
level = (int) score / 10; // 自动截断小数,89.9 → 8
}
switch (level) {
case 10: return "A+";
case 9: return "A";
case 8: return "B";
case 7: return "C";
case 6: return "D";
default: return "F"; // 包含 0–5 及负数兜底
}
}
public static void main(String[] args) {
System.out.println(getGrade(95.5)); // 输出:A
System.out.println(getGrade(82)); // 输出:B
System.out.println(getGrade(100)); // 输出:A+
System.out.println(getGrade(59)); // 输出:F
}
}
注意事项与常见问题
这个方案看似简单,但容易出错的地方有:
- 不要用 (int)Math.round(score / 10)——会导致 84.6 变成 8,但 85.0 也变 8,而 85 本该属 B,没问题;但若想严格按四舍五入划分(如 ≥85 才算 B),就不能依赖整除,得改用 if-else
- switch 不处理区间逻辑,它只是“值匹配”,所有范围判断都靠前置计算完成
- 如果系统要求更细粒度(如 A-, B+, C-),建议改用 if-else 或查表法(Map
),switch 在这种场景下反而不灵活
替代思路:用 switch + 枚举提升可读性
若希望逻辑更清晰、便于维护,可定义枚举封装等级规则:
enum Grade {
A_PLUS(10), A(9), B(8), C(7), D(6), F(0);
final int minLevel;
Grade(int minLevel) { this.minLevel = minLevel; }
static String of(double score) {
int level = score == 100 ? 10 : (int) score / 10;
return switch (level) {
case 10 -> "A+";
case 9 -> "A";
case 8 -> "B";
case 7 -> "C";
case 6 -> "D";
default -> "F";
};
}
}
调用时直接写 Grade.of(87),语义更明确,也方便后续扩展。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











