今天我正在开发一个新计划,在一个充满数据的文件中找到最便宜的披萨。我完全坚持一个问题,它使用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;
}
}
答案 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或者你可以简单地使用算术运算。