Java-比较ArrayList中对象的值

Java-比较ArrayList中对象的值,java,oop,user-interface,arraylist,Java,Oop,User Interface,Arraylist,因此,基本上我有一个程序,将pc添加到一个数组列表中,并且必须从中选择最好的一个(取决于分数/价格数学运算),这意味着分数为10且价格为5的pc比分数为10且价格为10的pc要好。问题是布尔值(isBetterThan)方法,该方法必须实现,并以某种方式用于比较它们,但我不知道具体是如何实现的)。 以下是迄今为止的代码: package filipapp; public interface Better { public double getPrice(); publi

因此,基本上我有一个程序,将pc添加到一个数组列表中,并且必须从中选择最好的一个(取决于分数/价格数学运算),这意味着分数为10且价格为5的pc比分数为10且价格为10的pc要好。问题是布尔值(isBetterThan)方法,该方法必须实现,并以某种方式用于比较它们,但我不知道具体是如何实现的)。 以下是迄今为止的代码:

    package filipapp;

public interface Better {
    public double getPrice();
    public void setPrice(double price);
    public int getScore();
    public void setScore(int score);
    public boolean isBetterThan(Object obj);
}
阶级

package-filipapp;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
公共类FilipApp扩展JFrame实现ActionListener{
专用JLabel l1、l2、l3;
专用JTextField t1、t2、t3;
私人JPanel p1、p2、p3;
专用按钮b1、b2;
私人住宅区;
私有JScrollPane滚动条;
公共计算机;
ArrayList pc=null;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
新的FilipApp().setVisible(true);
}
});
}
公共Filipap(){
超级(“最佳PC”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(600400);
容器容器=this.getContentPane();
p1=新的JPanel();
p1.设置布局(新网格布局(3,2));
l1=新的JLabel(“模型”,JLabel.CENTER);
p1.添加(l1);
t1=新的JTextField(15);
p1.添加(t1);
l2=新的JLabel(“价格”,JLabel.CENTER);
p1.添加(l2);
t2=新的JTextField(15);
p1.添加(t2);
l3=新的JLabel(“分数”,JLabel.CENTER);
p1.添加(l3);
t3=新的JTextField(15);
p1.添加(t3);
container.add(p1,BorderLayout.PAGE_START);
p2=新的JPanel();
b1=新的按钮(“添加”);
b1.添加ActionListener(本);
p2.加入(b1);
b2=新的JButton(“最佳”);
b2.addActionListener(本);
p2.加入(b2);
container.add(p2,BorderLayout.CENTER);
p3=新的JPanel();
面积=新面积(15,35);
scroll=新的JScrollPane(区域,JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS,JScrollPane.HORIZONTAL\u SCROLLBAR\u ALWAYS);
p3.添加(滚动);
容器。添加(p3,边框布局。第_页结束);
pc=newarraylist();
}
@凌驾
已执行的公共无效操作(操作事件e){
试一试{
对象源=e.getSource();
如果(源==b1){
p=新计算机(t1.getText()、Double.parseDouble(t2.getText())、Integer.parseInt(t3.getText());
pc.add(p);
area.append(“添加的PC\n”+p.toString()+”\n”);
t1.setText(“”);t2.setText(“”);t3.setText(“”);
}
else if(source==b2&&pc.isEmpty()){
area.append(“空列表\n”);
}
else if(source==b2){
用于(计算机元件:pc){
元素。比(元素)更好;
append(“最佳PC:+element.toString());
}
}
}捕获(NumberFormatException ex){
System.out.println(“输入数据错误”);
}
}
}

在yout循环中,您应该使用一个tempo变量作为最佳项目

       else if (source == b2){
          Computer best = pc.get(0); // Depend on your logic, you should verify if the pc list is empty or not before get(0)
          for (int i = 1; i < pc.size(); i++){
              Computer element = pc.get(i);
              if (element.isBetterThan(best)) {
                   best = element;
              }
          }
          // When loop exits, you have access to the best pc
          area.append("Best PC: "+best.toString()); 
        }
else if(source==b2){
Computer best=pc.get(0);//根据您的逻辑,您应该在get(0)之前验证pc列表是否为空
对于(int i=1;i
首先,如果它比另一个“更好”是主观的,那么我看到您正在使用
getScore()/getPrice()
来做出判断,所以我将继续假设这是好的

首先要了解的是,
比将
这个
计算机对象与另一个计算机对象进行比较要好。因此,启动界面时应如下所示

public boolean isBetterThan(Computer comp);
public boolean isBetterThan(Computer comp){
    if((this.getScore()/this.getPrice()) <
             comp.getScore()/comp.getPrice()) {
        return false;
    }
    return true;
}
然后使用除法逻辑实现它

public boolean isBetterThan(Computer comp);
public boolean isBetterThan(Computer comp){
    if((this.getScore()/this.getPrice()) <
             comp.getScore()/comp.getPrice()) {
        return false;
    }
    return true;
}
公共布尔值优于(计算机comp){
如果((this.getScore()/this.getPrice())<
comp.getScore()/comp.getPrice()){
返回false;
}
返回true;
}

很难回答。你试过什么?你想要逻辑?算法?语法?结构?我们需要更多关于您的算法/系统的详细信息。
score
price
总是满分吗?嗯,我已经玩代码有一段时间了,所以我尝试了一些东西,但它们似乎都没有给我想要的结果。如果可能的话,Syntab将是完美的。这里的主要问题是这个布尔方法,因为我根本无法理解如何使用它的逻辑。不,我只是举了一个例子。分数和价格可以是你想要的任何整数/双倍数。重点是通过某种方式比较,以分数/价格的最佳比例取出PC。我将创建一种生成分数的方法,基本上类似于每单位货币的分数,然后将其存储在对象中,并基于该字段最大化流。如果你真的想要一个类似布尔值的对象,那么我只需要实现comparator接口。我解决了它。感谢回答中的每个人:)