2017-10-21 3 views
0

Mir wurde eine Zuweisung zugewiesen, um ein Array von eingegebenen Werten zu sortieren. Ich habe Probleme mit dem Überschreiben der compareTo Methode mit in der Item Klasse. Ich möchte es so sortieren, dass, wenn zwei Artikel gleich teuer sind, dann basierend auf Category verglichen wird. Also Kinder (C) Artikel kommen zuerst und dann M und dann Frauen. Dies ist mein Code und jedes Mal, wenn ich versuche, es zu kompilieren, erhalte ich die Fehlermeldung, dass double nicht referenziert werden kann.Vergleichen Sie mit CompareTo sowohl eine Zeichenfolge als auch einen doppelten Wert innerhalb eines Arrays?

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; 
} 

Antwort

7

Zuerst Ihre compareTo Methode sollte ein Item als Parameter. Wenn dies zu einem Compilerfehler führt, stellen Sie sicher, dass ItemComparable<Item> implementiert.

Um primitive double Werte vergleichen zu können, verwenden Double.compare:

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

Wenn Sie Java 8 verwenden sind, können Sie es vorziehen, einige der erweiterten Funktionen von Comparator, die dieser Code machen verwenden erstreckt viel einfacher:

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

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

ich war zu vergessen die Vergleichbar hinzuzufügen, danke für, dass ich den Code immer am Ende nur um zu arbeiten, die sonst zu Ergebnis ändert = Double.compare (clothPrice, SonstigesPreis); Würde das das Gleiche bewirken? –

+0

@TommyHarvey Ja, das würde das Gleiche erreichen. Ich habe gerade Ihren Code so umgeschrieben, wie ich die meisten Leute geschrieben habe. – 4castle

+0

Ok danke, ich ging einfach vom Beispiel weg, das wir in der Klasse erhielten. Vielen Dank für Ihre Hilfe –

Verwandte Themen