You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义类mean()方法单独测试正常、主方法调用返回错误结果原因排查

故障原因分析
  • 核心问题1:全局静态变量dataToBeNormalized被修改
    你定义的dataToBeNormalized是imp类的静态公共列表,在zscore方法执行流程中,读取CSV原始数据到该列表后,你在做Z-score标准化时直接通过set方法将列表里的原始值替换成了标准化后的Z值。而ScoringSummaryImplementation的mean()方法是实时读取当前dataToBeNormalized里的内容计算均值,所以你在Z-score处理完成后再调用mean(),计算的是标准化后数据的均值,不是原始数据的均值。Z-score标准化后的数据理论均值就是0附近,你输出的0.82是计算时精度截断导致的正常结果,符合这个逻辑。
  • 核心问题2:统计值未预先缓存
    ScoringSummaryImplementation没有将原始数据的统计结果(均值、标准差)提前缓存为自身的成员变量,每次调用方法都依赖外部的dataToBeNormalized列表,只要外部列表内容变动,返回结果就会变动。单独测试内部类时你没有修改列表内容,所以返回结果符合预期。
  • 隐患问题:静态列表未做重置
    静态的dataToBeNormalized不会随imp实例销毁而清空,每次调用zscore方法都会往列表里追加新数据,多次调用时结果会完全错乱。
修复方案
  • 将dataToBeNormalized改为zscore方法内的局部变量,避免全局共享被意外修改,也避免多次调用数据累加的问题。
  • 实例化ScoringSummaryImplementation时,就把原始数据的均值、标准差提前计算好,存入内部的私有成员变量,后续调用mean()、standardDeviation()等方法直接返回缓存好的固定值,不再依赖外部可变数据。
  • Z-score标准化的结果存入新的列表,不要修改存储原始数据的列表,避免原始数据丢失。

内容的提问来源于stack exchange,提问作者reema Abd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 12:03:00