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
相关产品推荐
相关产品推荐

