2014-07-20 27 views
0

我想了解compareTo方法。我写了这个类AboutcompareTo,但我卡在为什么/我如何得到这个错误? - 代码几乎完成。 任何人都可以详细解释我做错了什么。由于为什么我得到关于compareTo方法的这个错误?

代码:

public class AboutCompareTo { 

    public static void main(String[] args) { 
     Fruit[] fruits = { new Fruit(2), new Fruit(3), new Fruit(1) }; 
     java.util.Arrays.sort(fruits); 
    } 

} 

class Fruit implements Comparable<Fruit> { 
    private double weight; 

    public Fruit(double weight) { 
     this.weight = weight; 
    } 

    @Override 
    public int compareTo(Fruit o) { 
     Fruit f = (Fruit) o; 
     if (Fruit > o.Fruit) // <-- the error 
      return 1; 
     else if ((Fruit < o.Fruit)) // <-- the error 
      return -1; 
     else 
      return 0; 

    } 

} 
+0

“_how我得到这个错误?_”什么错误?不要说你至少没有告诉我们什么是错误的。 “Fruit> o.Fruit”应该做什么? – csmckelvey

+0

您不能使用'>'和'<'运算符及其修饰符来比较Java对象。您必须使用对象方法本身来比较对象。 'f.compareTo(O)'。此外,您需要定义水果比其他水果更大或更小的含义。所以把你的compareTo()方法改成'return this.getWeight() - o.getWeight()' – Kon

+0

你不能对对象做关系运算符 –

回答

4

compareTo方法比较你的类的实例,即该Fruit,到另一个Fruit传递给你作为一个参数一个实例。因此,比较需要是o重量之间,和你自己的体重:

@Override 
public int compareTo(Fruit o) { 
    if (this.weight > o.weight) 
     return 1; 
    else if (this.weight < o.weight) 
     return -1; 
    else 
     return 0; 
} 

注1:我以前this.weight指这种Fruit的重量。我这样做是指出weight属性属于这个实例;但是,您可以从表达式中忽略this.,即使用weight > o.weight代替。

注2:我假设你做了这个学习练习。对于产品代码,Java类库提供了一个预先构建的方法,用于比较double,即Double.compare。您可以在单行中重写该方法:

@Override 
public int compareTo(Fruit o) { 
    return Double.compare(weight, o.weight); 
} 
+0

很好指出内建'Double.compare()'方法。 – user949300

+0

和Integer一样,Java 7也有'Long.compare(a,b)'。 –

+0

你说得对,我会扩展它以理解compareTo方法和对象思维。谢谢! – Kim12