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()返します(( など)。doublecompareTo()

また、インターフェイスのcompareTo()メソッドはではなくCompareaeを返す必要があります。intdouble

これを試して:

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を投稿すると役立ちます。しかし、 return であるため、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 に答える