我想了解compareTo
方法。我写了这个类AboutcompareTo
,但我陷入了为什么/如何得到这个错误? - 代码差不多完成了。
任何人都可以详细解释我做错了什么。感谢
代码:
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 :(得分: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
s - 即Double.compare
。您可以在一行中重写该方法:
@Override
public int compareTo(Fruit o) {
return Double.compare(weight, o.weight);
}