0

我有一个由以下组成的类(实现 Comparable):

double[1][2];

我会排序我的arrayList,我尝试过这种方式,但我报告了一个错误:

public double compareTo(Matrix another) {
return this.getCell(0,1).compareTo(another.getCel(0,1));
} 

怎么能这样排序呢?

4

2 回答 2

2

据推测,调用getCell()返回 a double,它没有方法(如 ( compareTo())。

此外,接口的compareTo()方法Compareae必须返回int,而不是double

尝试这个:

public int compareTo(Matrix another) {
    double diff = getCell(0,1) - another.getCel(0,1);
    return diff == 0 ? 0 : diff > 0 ? 1 : -1;
}

此解决方案适用于所有 java 版本。对于 java 7+,您可以这样做:

public int compareTo(Matrix another) {
    return Double.compare(getCell(0, 1), another.getCell(0, 1));
} 

this.还要注意从代码中删除冗余的轻微清理。

于 2013-08-18T00:46:15.503 回答
1

您的问题不是很清楚,发布SSCCE会有所帮助。但是由于getCell返回double,你的方法应该是这样的:

public int compareTo(Matrix another) {
    return Double.valueOf(this.getCell(0, 1))
            .compareTo(Double.valueOf(another.getCell(0, 1)));
} 

它的工作方式是将每个比较double的原语包装在一个Double对象中。由于Double实现Comparable<Double>,您的方法可以委托给Double.compareTo.

或者,您可以使用静态实用程序方法Double.compare(double, double)

public int compareTo(Matrix another) {
    return Double.compare(this.getCell(0, 1), another.getCell(0, 1));
} 

这是更可取的,因为它更简洁,但我想提到第一个解决方案,因为它涉及将原语装箱到它们的对象对应物,这通常是为了利用类方法和在集合中使用原语通常是必要的。

于 2013-08-17T23:49:41.357 回答