現在Java Goldの問題を解いていてわからないところがあります。
以下の問題なのですが、compareToメソッドのところで、どこをどのように見たら「変数Noの値を昇順でソートする」というように判断できるのでしょうか?
Java Gold SE7 スピードマスター問題集 問題70
いまいちこのcompareToの使い方の例が検索しても見つからず困っています。
compareTOメソッドの中でcompareToメソッドを使っているので。
もしアドバイスいただける方がいればよろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
... どこをどのように見たら「変数Noの値を昇順でソートする」というように判断できるのでしょうか?
この部分で, Fruit は、 no の昇順でソートされることがわかります、
java
1public int compareTo(Fruit f) { 2 Integer i = no; 3 return i.compareTo(f.no); 4}
すぐにわかるのは、 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() メソッド 基本的な実装方法
投稿2017/04/28 21:04
総合スコア22324
0
A.compareTo(B)
は、
A<B(Aが先に並ぶ)の時負の値を、
A=B(AとBが同じ値)の時0を、
A>B(Bが先に並ぶ)の時正の値を
返すように定めます。
ソートメソッドを使う時に、内部ではこのメソッドの返り値の符号によって、
2つのオブジェクトの大小(つまり、どちらが先に並ぶか)を判定しています。
IntegerのcompareToは、もちろん数値の小さいほうが先に並ぶと判定するように設計されています。
そしてこのFruitクラスの大小関係を決めるcompateToは、
this
のnoと比較対象のnoの大小関係と同じだということを表しています。
そのため、変数noの昇順になるように並びます。
投稿2017/04/28 16:51
総合スコア20651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/28 17:26
2017/04/28 17:45
2017/04/28 17:51
2017/04/28 23:18
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/28 22:54
2017/04/28 23:33
2017/04/29 10:47
2017/05/03 01:45