| 

.NET C# Java Javascript Exception

2
Hallo,

ich habe eine Liste mit Objekten. Diese besitzen die Variable distance. Nun möchte ich diese Liste sortieren.

Diese habe ich mit:
public class Hydrant implements Comparable<Hydrant>{
...
public int compareTo(Hydrant hydrant) {
return this.distance.compareTo(hydrant.getDistance());
}
}


compareTo möchte aber nur Strings sortieren... Also habe ich den double Wert nach String gecastet. Nur meint Java dass 11 vor 2 kommt :-(

Was mache ich falsch oder kennt jemand eine Lösung?

Stefan
News:
12.07.2012
DTAG 170 8
Von welchem Typ ist das *Feld* distance, und was ist der Rückgabetyp von getDistance()?
Matthias Hlawatsch 12.07.2012
public String getDistance(){
return this.distance;
}
DTAG 12.07.2012
Sowas in der Richtung dachte ich mir. Die Antwort liegt nun eigentlich auf der Hand. Vielleicht kommst Du ja selbst drauf. Oder Du beantwortest die Frage, warum Du für die Antworten zu Deinen 9 vorigen Fragen insgesamt nur eine positive Bewertung übrig hattest (wenn die Angaben auf Deiner Profil-Seite stimmen)...
Matthias Hlawatsch 13.07.2012
Ich habe die Funktion auch als Rückgabewert double implementiert, aber compareTo will laut Doc auch nur String verarbeiten.

Also eigentlich gebe ich für jeden Tipp, der MICH weiterbringt eine positive Rückmeldung.
DTAG 13.07.2012
Ich habe aber jetzt den grünen Pfeil entdeckt, habe ich mal Rückwirkend bei meinen anderen Fragen verwendet.
DTAG 13.07.2012
"Also eigentlich gebe ich für jeden Tipp, der MICH weiterbringt eine positive Rückmeldung."
Schön - mehr erwarten wir hier auch nicht. Genauer: wenn eine Antwort nicht hilfreich ist, wäre es auch gut, per Kommentar mitzuteilen, was Dir fehlt.
Wenn die Anzeige in Deinem Profil stimmt, hast Du bis gestern abend einmal einen Tipp als hilfreich erkannt. Das kam mir recht wenig vor, und deswegen hatte ich (nicht zum ersten Mal übrigens) nachgefragt. Nun sind es noch 6 weitere - das freut sicher alle, die die Antworten geschrieben haben.
Matthias Hlawatsch 13.07.2012
2 Antworten
1
Beim Vergleich von Strings macht Java (und andere Programmiersprachen auch) keinen Unterschied zwischen Ziffern und Buchstaben, und es wandelt auch nicht automatisch Strings, die wie Zahlen aussehen, in andere typen um. So wie 'a' vor 'b' kommt, kommt '1' vor '2', und ebenso kommt 'a' vor 'aa' vor 'b' vor 'ba', und genauso '1' vor '11' vor '2' vor '21'. '1' wird auch nicht als '01' interpretiert, genausowenig wie 'a' nicht gleich ' a' ist.

Am saubersten wäre es, Du würdest distance (sowohl das Feld als auch den Getter) als double typisieren, nicht als String. Wenn das Probleme macht, könntest Du notfalls nur das Feld als double typisieren, den Getter hingegen als String belassen. compareTo müßte dann so aussehen:

public int compareTo(Hydrant hydrant) {
return Double.compare(this.distance, hydrant.distance);
}


oder, wenn distance als Double (großes D!) definiert wird:

public int compareTo(Hydrant hydrant) {
return this.distance.compareTo(hydrant.distance);
}


Besser wäre es dann aber, Du würdest den Aspekt der String-Umwandlung des distance-doubles irgendwo anders unterbringen und nicht im Getter.

Und theoretisch könntest Du auch in compareTo() vor dem Vergleich beide Seiten von String in double umwandeln, aber dann würde der Schwanz mit dem Hund wedeln, finde ich.
13.07.2012
Matthias Hlawatsch 13,2k 4 9
Ich habe doubleDistance eingeführt. Hierzu die entsprechende get Methode, welche ein double zurück liefert, eingeführt. Das SDK bietet mir aber compareTo nicht an. Auszug SDK: public int compareTo (String string).

Ist das Android spezifisch?
DTAG 13.07.2012
1
Sorry, mein Fehler. Bin häufiger in C# unterwegs als in Java, und dort gibt es keinen Unterschied zwischen double und Double. ("double, Double, toil and trouble" fällt mir dazu ein ;-) )
Habe meine Antwort korrigiert. Entweder doubleDistance als Double definieren oder die statische Double.compare()-Methode verwenden.
Matthias Hlawatsch 13.07.2012
Super, danke! Ich war jetzt bereits auch schon auf dem Weg, hatte aber noch die zu vergleichenden Parameter nicht richtig.
DTAG 13.07.2012
0
Falsches Feld. Sorry
12.07.2012
DTAG 170 8

Stelle deine Java-Frage jetzt!