在Java里如何实现简单评分系统_Java条件判断项目说明
发布时间 - 2026-01-31 00:00:00 点击率:次Java评分逻辑应优先用if-else配合左闭右开边界(如score>=90)处理分数等级,统一阈值为常量,校验非法输入(NaN、无穷、越界),避免浮点误差与硬编码。
用 if-else 分支判断分数等级
Java 里最直接的评分逻辑就是根据数值范围输出对应等级,比如 90–100 是 A,80–89 是 B。关键不是“怎么写分支”,而是**边界值处理是否一致**——score >= 90 和 score > 89 表面等价,但遇到浮点输入或未来扩展小数评分时行为可能不同。
推荐统一用“左闭右开”习惯(如 score >= 90 && score ),避免漏掉满分或重复覆盖:
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "F";
}
- 别用
==判断分数段(比如score == 95),这不适用于区间判定 - 确保
score是double或int,避免传入null导致NullPointerException - 如果分数可能为负或超 100,提前加校验,否则 “F” 分支会掩盖数据异常
用 switch + Java 14+ 模式匹配简化多档判断
Java 14 起支持 switch 表达式配合模式匹配,但注意:它**不能直接对区间做 case**,必须先将分数转为离散等级码(比如用 (int) score / 10 得到 0–10 的整数)。
适合分数严格为整数、且分档规则是 10 分一档的场景:
int band = Math.max(0, Math.min(10, (int) score / 10)); // 限定在 0–10
String grade = switch (band) {
case 10 -> "A"; // 100–109(实际只会到100)
case 9 -> "A"; // 90–99
case 8 -> "B"; // 80–89
case 7 -> "C"; // 70–79
case 6 -> "D"; // 60–69
default -> "F"; // 0–59
};
- 必须用
Math.max/min防止band越界,否则switch会抛IllegalArgumentException - 该写法牺牲了可读性换简洁性,若分档不规则(如 85 才算 B),不如退回 if-else
- Java 13 及更早版本
不支持 switch 表达式,编译会报错
error: switch expressions are not supported
封装成方法并处理非法输入
真实项目中,评分逻辑不会裸写在 main 里,而应封装为独立方法,重点在于**提前拦截坏数据**,而不是让调用方承担校验责任。
典型错误是忽略 Double.NaN、无穷大或非数字字符串转换失败:
public static String getGrade(double score) {
if (Double.isNaN(score) || Double.isInfinite(score)) {
throw new IllegalArgumentException("Score must be a valid finite number");
}
if (score < 0 || score > 100) {
throw new IllegalArgumentException("Score must be between 0 and 100");
}
// ... 后续 if-else 判断
}
- 不要依赖调用方“传进来就是合法的”,尤其当分数来自用户输入或 CSV 解析时
- 异常类型选
IllegalArgumentException比RuntimeException更明确 - 如果系统要求容忍异常值,可返回
"N/A"或null,但需在 Javadoc 明确说明
避免硬编码和魔数,提升可维护性
把 90、80 这类数字直接写死在 if 条件里,后续调整分级标准(比如 B 线从 80 改成 82)就得改多处,极易遗漏。
用静态常量或配置化方式管理阈值:
private static final double A_MIN = 90.0; private static final double B_MIN = 80.0; private static final double C_MIN = 70.0; private static final double D_MIN = 60.0; if (score >= A_MIN) grade = "A"; else if (score >= B_MIN) grade = "B"; // ...
- 常量名要体现业务含义(
A_MIN比THRESHOLD_1好懂) - 如果分级规则频繁变动,考虑从外部配置文件或数据库加载,而非改代码
- 注意浮点比较误差:用
score >= 80.0安全,但避免score == 80.0判定临界点
边界条件永远比主流程更易出错,比如刚好 60.0 分该算 D 还是 F、用户输了个空字符串转成 0.0 是否合理——这些细节不写进测试用例,上线后就会变成凌晨三点的报警。
# java
# 编码
# csv
# ai
# switch
# 配置文件
# NULL
# 常量
# if
# 封装
# Error
# math
# 字符串
# int
# double
# 数据库
# 浮点
# 就会
# 适用于
# 只会
# 这类
# 不支持
# 就得
# 三点
# 报错
# 输了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
北京专业网站制作设计师招聘,北京白云观官方网站?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
做企业网站制作流程,企业网站制作基本流程有哪些?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
java获取注册ip实例
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
大同网页,大同瑞慈医院官网?
5种Android数据存储方式汇总
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Laravel如何生成URL和重定向?(路由助手函数)
如何快速上传建站程序避免常见错误?
php485函数参数是什么意思_php485各参数详细说明【介绍】
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何快速搭建自助建站会员专属系统?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
黑客入侵网站服务器的常见手法有哪些?
详解MySQL数据库的安装与密码配置
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
jQuery 常见小例汇总
详解Oracle修改字段类型方法总结
如何用已有域名快速搭建网站?
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何快速辨别茅台真假?关键步骤解析
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
java中使用zxing批量生成二维码立牌
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
微信小程序 require机制详解及实例代码
如何在建站之星网店版论坛获取技术支持?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel如何处理CORS跨域请求?(配置示例)
SQL查询语句优化的实用方法总结
奇安信“盘古石”团队突破 iOS 26.1 提权
香港服务器如何优化才能显著提升网站加载速度?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例


