2017-10-21 6 views
0

挿入ソートと選択ソートの両方を使用して入力値の配列をソートする割り当てが与えられました。私はcompareToメソッドをItemクラスで上書きすることにいくつか問題があります。 2つの商品に同じ価格が設定されている場合は、Categoryに基づいて比較するように並べ替えたいと思います。だから子供(C)の商品が最初に来て、次にMさん、次に女性が来ます。これは私のコードなので、コンパイルしようとするたびにdoubleを参照できないというエラーが表示されます。CompareToを使用して、配列内の文字列とdouble値の両方を比較しますか?

public int compareTo (Object other) { 
     int result; 

     double otherPrice = ((Item)other).getClothPrice(); 
     String otherCategory = ((Item)other).getClothCategory(); 

     if (clothPrice == otherPrice) 
     result = clothCategory.compareTo(otherCategory); 
     else 
     result = clothPrice.compareTo(otherPrice); 

     return result; 
} 

答えて

7

まず、あなたのcompareToメソッドは、パラメータとしてItemを取る必要があります。これによりコンパイルエラーが発生した場合は、ItemComparable<Item>を実装していることを確認してください。

Double.compareを使用し、プリミティブdouble値を比較する:

public int compareTo(Item other) { 
    int result = Double.compare(clothPrice, other.clothPrice); 
    if (result == 0) { 
     result = clothCategory.compareTo(other.clothCategory); 
    } 
    return result; 
} 

は、Java 8を使用している場合は、あなたがはるかに簡単にこのコードを拡張しますComparatorのより高度な機能のいくつかを使用することを好むことがあります。

private static final Comparator<Item> naturalOrdering = Comparator 
     .comparingDouble(Item::getClothPrice) 
     .thenComparing(Item::getClothCategory); 

public int compareTo(Item other) { 
    return naturalOrdering.compare(this, other); 
} 
+0

私は同等を追加し忘れた、私はちょうど= Double.compare(clothPrice 結果に他変更することで動作するようにコードを取得してしまったことをありがとうございました、 otherPrice);それは同じことを達成するでしょうか? –

+0

@TommyHarveyはい、それは同じことを達成するでしょう。ほとんどの人が書いたようにコードを書き直しました。 – 4castle

+0

ありがとう、私はクラスで与えられた例を外しています。おかげさまでありがとうございます –

関連する問題