0
public int compareTo(Object obj){
   Books bk = (Books) bk;
   return this.id - obj.id;
}

idが正の値である場合、およびが正の値である場合、私のコードは正常に機能しIntegerます。id負の値になることは可能ですか?そのためのコードを変更するにはどうすればよいですか?

4

4 に答える 4

2

以下は、おそらくそれを実装する最も簡単な方法です。

public int compareTo(Object obj) {
   Books bk = (Books)obj;
   return Integer.compare(this.id, bk.id);
}

現在のバージョンは、整数のオーバーフローの影響を受けやすいことを除いて、ほぼ正しいです。

于 2013-01-10T19:39:06.467 に答える
1

オーバーライドcompareToすると、これらの質問に対する答えを定義できます。id負の値になる可能性があるかどうかは、プログラムによって異なります。あなたが自分自身に問いかけなければならない質問は、「ある本が別の本よりも「大きい」(または小さい)とはどういう意味ですか?」です。答えが、IDが大きい方がBookが大きい方である場合、1つの小さな間違いを除いて、実装は問題ありません。

public int compareTo(Object obj){
   Books bk = (Books) obj;
   return this.id - bk.id;
}
于 2013-01-10T19:40:42.793 に答える
0

負の値を返すことができる必要があります。Comparable仕様から、

a.compareTo(b) > 0

それから

b.compareTo(a) < 0

compareTo()そうでなければ、注文を確定するために使用することはできません

于 2013-01-10T19:40:57.187 に答える
0

私はそれを機能させました:D

return (this.id > bk.id ) ? -1: (this.id < bk.id) ? 1:0 ;

これは私が望んでいたように機能しますが、あなたの返事に感謝します

于 2013-01-10T19:44:09.130 に答える