在Java里如何实现简单评分系统_Java条件判断项目说明

发布时间 - 2026-01-31 00:00:00    点击率:
Java评分逻辑应优先用if-else配合左闭右开边界(如score>=90)处理分数等级,统一阈值为常量,校验非法输入(NaN、无穷、越界),避免浮点误差与硬编码。

用 if-else 分支判断分数等级

Java 里最直接的评分逻辑就是根据数值范围输出对应等级,比如 90–100 是 A,80–89 是 B。关键不是“怎么写分支”,而是**边界值处理是否一致**——score >= 90score > 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),这不适用于区间判定
  • 确保 scoredoubleint,避免传入 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 解析时
  • 异常类型选 IllegalArgumentExceptionRuntimeException 更明确
  • 如果系统要求容忍异常值,可返回 "N/A"null,但需在 Javadoc 明确说明

避免硬编码和魔数,提升可维护性

9080 这类数字直接写死在 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_MINTHRESHOLD_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队列驱动与任务分发实例