Java compareTo方法与Double[无法取消引用Double]

Java compareTo方法与Double[无法取消引用Double],java,computer-science,compareto,Java,Computer Science,Compareto,今天,我正在开发一个新程序,在一个充满数据的文件中查找最便宜的比萨饼。我完全被一个问题所困扰,那就是使用compareTo方法。我在我的资源类中创建了它,但是我没有收到错误,说double不能取消引用,我查找了这个问题,仍然没有得到任何帮助。我不是最高级的程序员,也不理解其他资源中许多复杂的答案。我对该计划的说明如下: B.CheapPizza.java A.目标–在Pizza.java中实现可比较的接口。 B作业–使用您复制到第10章中的Pizza.java文件。实施 Comparable接口

今天,我正在开发一个新程序,在一个充满数据的文件中查找最便宜的比萨饼。我完全被一个问题所困扰,那就是使用compareTo方法。我在我的资源类中创建了它,但是我没有收到错误,说double不能取消引用,我查找了这个问题,仍然没有得到任何帮助。我不是最高级的程序员,也不理解其他资源中许多复杂的答案。我对该计划的说明如下:

B.CheapPizza.java A.目标–在Pizza.java中实现可比较的接口。 B作业–使用您复制到第10章中的Pizza.java文件。实施 Comparable接口并添加compareTo()方法。应使用此compareTo() 帮助您在pizza.txt中找到最便宜的比萨饼。 编写CheapPizza.java客户端类来测试新版本的Pizza.java。便宜的比萨饼 阅读文件中的比萨饼,并使用 compareTo()方法。创建比萨饼对象以容纳最便宜的比萨饼和比萨饼对象 从文件中读入比萨饼。使用compareTo()将最便宜的比萨饼与最便宜的比萨饼进行比较 比萨饼从文件中读取。如果从文件中读取的比萨饼更便宜,请更改最便宜的比萨饼 披萨 A.输入–黑板上的pizzas.txt文件。 B输出–应以如下所示的格式显示: 最便宜的比萨:9英寸橄榄比萨售价7.99美元

compareTo方法的代码在我的代码底部,有人能解释一下我做了什么不对吗?谢谢你抽出时间,祝你度过愉快的一天~

public class Pizza   {   
    private int size;
    private double cost;
    private String topping;

    public Pizza(int s, double c, String t)
    {
       size = s;
       cost = c;
       topping = t;
    }
    public Pizza(String t, int s, double c) //.equals Method For Comparing Pizza for ''PizzaMatch''
    {
       topping = t;
       size = s;
       cost = c;

    }

    public Pizza()
    {
       size = 10;
       cost = 9.00;
       topping = "Cheese";
    }

    public String toString()
    {
       return String.format("%d inch %s pizza will cost $%.2f", size, topping, cost);
    }
    public int getSize()
    {
       return size;
    }
    public void setSize(int s)
    {
       size = s;
    }

    public double getCost()
    {
       return cost;
    }
    public void setCost(Double c)
    {
       cost = c;  
    }
    public String getTopping()
    {
       return topping;   
    }
    public void setTopping(String t)
    {
       topping = t;
    }

    public boolean equals(Object obj) //.equals Method For Comparing Pizza in "PizzaMatch"
    {
       if(!(obj instanceof Pizza)) 
          throw new IllegalArgumentException("Parameter must be of Pizza!");

       Pizza temp = (Pizza) obj;

       if (this.topping.equals(temp.topping) && this.size == temp.size  && this.cost == temp.cost)
          return true;
       else 
          return false;

    }
    //============================================================================================
    public int compareTo(Object obj){
        if(!(obj instanceof Pizza))
            throw new IllegalArgumentException
                ("Parameter must be a Pizza");
        Pizza temp = (Pizza) obj;  
        if (this.cost.compareTo(temp.cost) < 0) //this comes 1st
            return -1;
        else if(this.cost.compareTo(temp.cost) > 0) //temp comes 1st
            return 1;
        else //this and temp are equal
             return 0;
    }
}
public class Pizza{
私有整数大小;
私人双重成本;
私用线头;
公共披萨(整数s,双c,字符串t)
{
尺寸=s;
成本=c;
浇头=t;
}
公共比萨饼(字符串t,整数s,双c)//。用于比较“比萨饼匹配”比萨饼的等效方法
{
浇头=t;
尺寸=s;
成本=c;
}
公共比萨饼()
{
尺寸=10;
成本=9.00;
topping=“奶酪”;
}
公共字符串toString()
{
返回字符串.format(“%d英寸%s比萨饼将花费%.2f”,大小,顶部,成本);
}
公共int getSize()
{
返回大小;
}
公共无效设置大小(int s)
{
尺寸=s;
}
公共成本
{
退货成本;
}
公共成本(双c)
{
成本=c;
}
公共字符串获取()
{
返回浇头;
}
公共void setTopping(字符串t)
{
浇头=t;
}
公共布尔等于(对象obj)/.equals方法,用于在“PizzaMatch”中比较Pizza
{
如果(!(比萨饼的obj实例))
抛出新的IllegalArgumentException(“参数必须为Pizza!”);
比萨饼温度=(比萨饼)obj;
如果(this.topping.equals(temp.topping)&&this.size==temp.size&&this.cost==temp.cost)
返回true;
其他的
返回false;
}
//============================================================================================
公共整数比较(对象对象对象){
如果(!(比萨饼的obj实例))
抛出新的IllegalArgumentException
(“参数必须是披萨”);
比萨饼温度=(比萨饼)obj;
如果(此成本比(临时成本)<0)//则排在第一位
返回-1;
否则如果(此成本比(临时成本)>0)//临时成本排在第一位
返回1;
否则//此值和温度相等
返回0;
}
}

cost
是基元类型的字段
double
,您不能对基元类型调用方法(在您的情况下是
compareTo()
),只能对对象调用方法。要比较两个双打,只需直接比较

 if (this.cost < temp.cost)
    return -1;
 else if(this.cost > temp.cost)
    return 1;
 else
    return 0;
if(此成本<临时成本)
返回-1;
否则,如果(此成本>临时成本)
返回1;
其他的
返回0;

成本是原来的两倍。CompareTo是对象中的一个方法。因此,您可以使用Double对象而不是Double,或者使用简单的算术运算。

您必须实现java.lang.Compariable接口到Pizza类

public class Pizza implements Comparator<Pizza> {
    // Enter other codes
    // with toString

   @Override
   public int compareTo(Pizza o) {
        return  Double.valueOf(this.cost).compareTo(Double.valueOf(o.cost));
   }
}

您不能将
compareTo
与原语一起使用,原语是
double
s。只需直接比较它们,例如,
this.cost
。非常感谢您提供的信息!这将修复一个错误,但是他们仍然会遇到temp.cost是一个私有变量的问题,并且不能通过
compareTo
方法来访问。不,因为它也是
Pizza
类的一个方法,因此可以访问它的私有变量。哦,我想它可以。我的错误谢谢你让我知道这种排序数据的新方法,我很感激!我感谢你的帮助,我从来没有被教过这一点,我很高兴有人能向我解释这一点!
public class Pizza implements Comparator<Pizza> {
    // Enter other codes
    // with toString

   @Override
   public int compareTo(Pizza o) {
        return  Double.valueOf(this.cost).compareTo(Double.valueOf(o.cost));
   }
}
public static void main(String[] args) {
    List l = new ArrayList();
    l.add(new Pizza(9, 7.99, "Olive Pizza"));
    l.add(new Pizza(9, 8.99, "Hot & Spicy Chicken Pizza"));
    l.add(new Pizza(9, 9.99, "Corned Mutton Sensation Pizza"));
    Collections.sort(l);
    System.out.println(" " + l.get(0));
}