compareTo方法与双打[双倍无法解除引用]

时间:2014-12-17 16:33:47

标签: java computer-science compareto

今天我正在开发一个新计划,在一个充满数据的文件中找到最便宜的披萨。我完全坚持一个问题,它使用compareTo方法。我在我的资源类中创建了它,但我没有得到错误,说双重不能被解除引用,我看起来这个问题仍然没有任何帮助。我不是最先进的程序员,也不了解其他资源上的许多复杂答案。我对该计划的规格如下:

  

B中。 CheapPizza.java   一个。目标 - 在Pizza.java中实现Comparable接口。   湾分配 - 使用您复制到第10章的Pizza.java文件。实现   可比较的接口并添加compareTo()方法。应该使用compareTo()   帮助您找到pizza.txt中最便宜的披萨。   编写CheapPizza.java客户端类来测试Pizza.java的新版本。 CheapPizza会   从文件中读取比萨饼,并使用。来跟踪最便宜的比萨饼   compareTo()方法。创建一个Pizza对象来保存最便宜的披萨和Pizza对象   从文件中读取比萨饼。使用compareTo()来比较最便宜的披萨   披萨从文件中读取。如果从文件中读取的披萨更便宜,请更换最便宜的   比萨。   一个。输入 - 黑板上的pizzas.txt文件。   湾输出 - 应完全按以下格式显示:   最便宜的披萨: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;
    }
}

3 个答案:

答案 0 :(得分:2)

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

 if (this.cost < temp.cost)
    return -1;
 else if(this.cost > temp.cost)
    return 1;
 else
    return 0;

答案 1 :(得分:2)

您必须实现与Pizza类

的java.lang.Comparable接口
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));
   }
}

然后使用Collections.sort(listOfPizzas)根据成本挑选比萨饼。

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));
}

答案 2 :(得分:1)

       if(!(obj instanceof Pizza))
            throw new IllegalArgumentException
            ("Parameter must be a Pizza");
        Pizza temp = (Pizza) obj;  
        return Double.valueOf(this.cost).compareTo(Double.valueOf(temp.cost));
成本是原始的两倍。 CompareTo是对象中的方法。所以你可以使用Double对象而不是double或者你可以简单地使用算术运算。