讲师中心 微信公众号
AI工具推荐 视频效率加速

如何为成绩簿类编写符合业务逻辑的 accrueScore 修改器方法

老墨大大_4385

老墨大大_4385

发布时间:2026-03-31 15:37:01

|

719人浏览过

|

来源于php中文网

原创

如何为成绩簿类编写符合业务逻辑的 accrueScore 修改器方法

本文详解如何为 Assignment 类设计健壮、可维护的 accrueScore mutator 方法,涵盖边界校验、极值更新、累计统计等核心逻辑,并提供完整可运行代码与关键注意事项。

本文详解如何为 `assignment` 类设计健壮、可维护的 `accruescore` mutator 方法,涵盖边界校验、极值更新、累计统计等核心逻辑,并提供完整可运行代码与关键注意事项。

在面向对象编程中,mutator(修改器)方法用于安全地变更对象内部状态。对于模拟单个作业成绩管理的 Assignment 类,accrueScore(int newScore) 是一个典型的数据聚合型修改器——它不返回新对象,而是持续更新成绩统计元数据。正确实现需兼顾数据一致性、边界鲁棒性和逻辑完整性。

✅ 核心实现逻辑解析

accrueScore 需严格遵循六条业务规则。关键在于:

  • 先校验,再操作:所有更新动作仅在 0 ≤ newScore ≤ totalPoints 时执行;
  • 首次赋值特殊处理:当 count == 0 时,minScore 和 maxScore 同时初始化为 newScore,避免初始值(如 0)干扰后续比较;
  • 极值动态维护:使用独立 if 判断(而非 else if),确保 newScore 可同时成为新的最小值和最大值(虽数学上不可能,但逻辑更清晰且便于未来扩展);
  • 原子性累计:sum += newScore 与 count++ 必须成对执行,且置于校验块内,防止非法分数污染统计。

以下是完整、经优化的实现(含必要注释与修复):

public class Assignment {
    private String name;
    private int totalPoints;
    private int minScore;
    private int maxScore;
    private int sum;
    private int count;

    public Assignment(String inName, int inTotalPoints) {
        this.name = inName;
        this.totalPoints = inTotalPoints;
        // 初始化为无效值(非0),明确标识“尚未录入任何成绩”
        this.minScore = Integer.MAX_VALUE; 
        this.maxScore = Integer.MIN_VALUE;
        this.sum = 0;
        this.count = 0;
    }

    /**
     * 记录一次作业得分,自动更新统计信息
     * @param newScore 待录入的成绩(必须在 [0, totalPoints] 范围内)
     * @return 当前累计成绩总数(便于链式调用或调试),非法输入时返回当前 sum
     */
    public int accrueScore(int newScore) {
        // 规则1:范围校验(闭区间)
        if (newScore < 0 || newScore > totalPoints) {
            return sum; // 提前退出,不修改任何状态
        }

        // 规则2:首次录入 —— 初始化极值
        if (count == 0) {
            minScore = maxScore = newScore;
        } else {
            // 规则3 & 4:动态更新极值(独立判断,逻辑清晰)
            if (newScore > maxScore) {
                maxScore = newScore;
            }
            if (newScore < minScore) {
                minScore = newScore;
            }
        }

        // 规则5 & 6:累计求和与计数
        sum += newScore;
        count++;

        return sum;
    }

    // 辅助 getter(供测试/验证用)
    public int getMinScore() { return count == 0 ? 0 : minScore; }
    public int getMaxScore() { return count == 0 ? 0 : maxScore; }
    public double getAverage() { return count == 0 ? 0.0 : (double) sum / count; }
}

⚠️ 关键注意事项

  • 初始值陷阱:原代码将 minScore/maxScore 初始化为 0,会导致首个正数成绩无法正确更新 minScore(因 0
  • 方法返回值设计:返回 sum 既满足“无副作用”原则(不改变对象状态),又提供即时反馈,支持如 System.out.println(assignment.accrueScore(85)); 的调试场景。
  • 线程安全性:当前实现非线程安全。若需并发访问,应添加同步块(如 synchronized(this))或改用 AtomicInteger。
  • 扩展建议:生产环境可增加日志记录、事件通知(如 ScoreAddedEvent)或异常抛出(如 IllegalArgumentException 替代静默忽略),以增强可观测性。

通过以上实现,Assignment 类不仅能准确建模单次作业的成绩聚合过程,其清晰的逻辑分层与防御性编程风格,也为后续扩展(如成绩分布直方图、离群值检测)奠定了坚实基础。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

11897

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

9002

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

7712

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1264

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1008

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1516

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

3109

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

20371

2023.08.03

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn