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

Java:如何用isBetterThan方法在ArrayList中比较PC对象选最优者

实现isBetterThan方法筛选最优PC的方案

嘿,我来帮你搞定这个isBetterThan方法的实现和用法,完全贴合你「得分/价格」比值越高越优的需求~

第一步:完善Better接口

你现有的Better接口只有getPrice()方法,但咱们还需要获取PC的得分,所以得把必要的方法补充到接口里,让所有实现类都遵循统一规范:

package filipapp;

public interface Better {
    double getPrice();
    double getScore();
    boolean isBetterThan(Better other);
}

(接口方法默认是public的,省略掉也不影响功能,当然你保留也没问题)

第二步:PC类实现Better接口

接下来写PC类,实现接口的所有方法,核心就是isBetterThan的逻辑实现:

package filipapp;

public class PC implements Better {
    private double score;
    private double price;

    // 构造方法,初始化PC的得分和价格
    public PC(double score, double price) {
        this.score = score;
        this.price = price;
    }

    @Override
    public double getPrice() {
        return price;
    }

    @Override
    public double getScore() {
        return score;
    }

    @Override
    public boolean isBetterThan(Better other) {
        // 先做合法性检查,避免价格为0或负数导致除以0的异常
        if (this.price <= 0 || other.getPrice() <= 0) {
            throw new IllegalArgumentException("价格不能为0或负数哦");
        }
        // 计算两个PC的性价比比值
        double currentRatio = this.score / this.price;
        double otherRatio = other.getScore() / other.getPrice();
        // 当前PC比值更高的话,返回true,说明它更优
        return currentRatio > otherRatio;
    }
}

第三步:在ArrayList中筛选最优PC

现在就可以把PC对象加到ArrayList里,用isBetterThan遍历找出最优的那个了:

package filipapp;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<PC> pcList = new ArrayList<>();
        // 添几个测试用的PC对象
        pcList.add(new PC(10, 5));
        pcList.add(new PC(10, 10));
        pcList.add(new PC(15, 6));

        // 默认第一个是最优,然后逐个比较替换
        PC bestPC = pcList.get(0);
        for (PC pc : pcList) {
            if (pc.isBetterThan(bestPC)) {
                bestPC = pc;
            }
        }

        // 输出结果
        System.out.printf("最优PC:得分%.0f,价格%.0f%n", bestPC.getScore(), bestPC.getPrice());
        // 这里会输出得分15、价格6的PC,因为15/6=2.5,比10/5=2的性价比更高
    }
}

额外小细节说明

  • 如果你的得分、价格是整数类型,把double改成int就行,比值计算时会自动转成浮点数,不影响结果。
  • 要是遇到两个PC性价比完全相同的情况,isBetterThan会返回false,最优PC会保留原来的那个,符合逻辑。
  • 加入价格合法性检查是为了避免运行时出现除以0的异常,让程序更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:09:53