質問: 現在Java Goldの問題を解いていてわからないところがあります。 以下の問題なのですが、compareToメソッドのところで、どこをどのように見たら「変数Noの値を昇順でソートする」というように判断できるのでしょうか? Java Gold SE7 スピードマスター問題集 問題70 いまいちこのcompareToの使い方の例が検索しても見つからず困っています。 compareTOメソッドの中でcompareToメソッドを使っているので。 もしアドバイスいただける方がいればよろしくお願いいたします。
回答: > > ... どこをどのように見たら「変数Noの値を昇順でソートする」というように判断できるのでしょうか? > > > この部分で, Fruit は、 no の昇順でソートされることがわかります、 ``` public int compareTo(Fruit f) { Integer i = no; return i.compareTo(f.no); } ``` ` すぐにわかるのは、 Fruit の no を大小判定につかっていることです。 そして、 i.compareTo(f.no) としているので、昇順にソートされるということがわかります。 これを (-1) * i.compareTo(f.no) とすれば、降順になります。 Fruit の nama でのソートに変更したい場合は、 return name.compareTo(f.name); とします。 元のコードでは, no だけで大小判定しているので、 no は同じだけど name が違う Frout がある場合は、ソート結果がどうなるかは予測できません。 no が同じ場合は、name で大小判定するというように、コードを修正したほうが良いかもしれません。 > > ... compareTOメソッドの中でcompareToメソッドを使っている ... > > > Fruit の大小判定メソッド(compareTo) の中で、 Integer の大小判定メソッド(compareTo) をつかっているのです。 i.compareTo(f.no) を使わずに、return i - f.no; としてもよいです。 参考情報: * compareTo() メソッド 基本的な実装方法