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

如何使用compareTo方法按指定公式对Java自定义对象排序

问题修正方案

你当前的排序逻辑错误点在于compareTo方法仅对比了weight属性,没有按照指定加权公式计算综合评分后再对比,只需要修改compareTo的实现逻辑即可。

排序规则说明

指定排序的加权公式为:

综合得分 = (身高 + 体重) * 30% + 分数 * 40%
排序时对比两个学生对象的综合得分即可,默认Arrays.sort为升序排列(得分从低到高),需要降序可以调整返回值的对比顺序。

修改后的compareTo实现

直接替换原Student类中的compareTo方法即可,注意提前确认类中存在getHeight()、getScore()对应的getter方法:

@Override
public int compareTo(Student o) {
    // 计算当前实例的综合得分
    float currentTotal = (this.getHeight() + this.getWeight()) * 0.3f + this.getScore() * 0.4f;
    // 计算待对比实例的综合得分
    float compareTotal = (o.getHeight() + o.getWeight()) * 0.3f + o.getScore() * 0.4f;
    // 用Float.compare处理浮点数对比,避免精度转换导致的排序错误
    return Float.compare(currentTotal, compareTotal);
}

可选调整

  • 如果需要按综合得分从高到低降序排列,将return语句修改为return Float.compare(compareTotal, currentTotal);
  • 如果权重比例需要调整,直接修改公式中对应的乘算系数即可

运行结果参考

按升序排序后的输出顺序为:

  • zhouqi:综合得分112.0
  • zhengba:综合得分113.5
  • lisi:综合得分116.4
  • wangwu:综合得分119.2
  • zhangsan:综合得分122.0
  • zhaoliu:综合得分123.9

内容的提问来源于stack exchange,提问作者Broke Samith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:39:20