Java compareTo für Strings und Integer-Argumente
Ich bin Implementierung des bubble-sort-Algorithmus und ich will, dass es in der Lage zu akzeptieren sowohl Integer
und String
Parameter. Ich warf alle Eingaben als Strings, und verwenden Sie die compareTo
- Methode zu vergleichen, die ganzen zahlen gegossen als strings an die Saiten. Ich erhalte eine falsche Antwort ein, wenn mit compareTo
zu vergleichen, die gegossenen zahlen. Was mache ich falsch?
InformationsquelleAutor | 2009-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Integer.compareTo sortiert zahlen numerisch. Dies ist, was Sie wollen.
String.compareTo sortiert strings lexikografisch, das heißt, in alphabetischer Reihenfolge.
Ich erinnere mich, in Windows 3.1, die den Ordner mit den Fotos aus meiner digital-Kamera bestellt wurde wie diese: BILD1, PHOTO10, PHOTO100, BILD2, PHOTO20, FOTO3, ... und so weiter. Windows XP sortiert Sie mehr wie man es erwarten würde: BILD1, BILD2, FOTO3, ... etc. Dies ist, weil es hat eine spezielle Sortierung Regeln für Zeichenfolgen, zahlen darzustellen.
In lexikographische Bestellung, jedes Zeichen in einer Zeichenkette A verglichen wird, ist das entsprechende Zeichen in der anderen Zeichenfolge B. Für jedes entsprechende Zeichen in den beiden strings:
Den vierten Punkt hier ist, warum Sie werden immer falsche Antworten, vorausgesetzt Eddie ' s Analyse des Problems ist richtig.
Betrachten, die den String "10" und "2". Lexikographische Bestellung Aussehen würde, bei den ersten Zeichen eines jeden, '1' und '2' angeben. Das Zeichen '1' vor '2' im Zeichensatz Java verwendet, so dass es sortiert "10" vor "2", in der gleichen Weise, dass "bare" ist sortiert, bevor Sie "Hase", weil "b' "kommt vor" 'h'.
Ich schlage vor, Sie werfen Sie Ihre strings in Ganzzahlen vor der Sortierung. Verwenden Sie Integer.parseString, dies zu tun.
Nette Antwort mit dem schönen Beispiel.
InformationsquelleAutor Iain Samuel McLean Elder
sind Sie sicher, dass Sie möchten, zu mischen, Ganzzahlen und Strings in der gleichen Liste? wenn dem so ist, sind die ganzen zahlen kleiner oder größer als Strings? was ist das Besondere Sortier-Kriterien?
können Sie auch einen bubble-sort-Methode, die verschiedene Arten von Listen von Integer-und Listen-String (und die Listen der anderen Klasse). so zu tun, können Sie mit Generika. zum Beispiel:
verwenden Sie die
comparator
parameter zu vergleichen, dieelements
, das ist, warum Sie können ganze zahlen oder Strings (nicht beide gleichzeitig). der compiler Sie nicht lassen [ohne Warnung] übergeben eine Liste von Objekten einer Klasse und einem Komparator eine andere Klasse, so ist der Vergleich funktioniert immer.InformationsquelleAutor cd1
Nehmen Sie eine Instanz von
Comparable
.Strings können nicht wirklich gewirkt werden, um ganze zahlen, und es gibt keine comparryo Methode.
InformationsquelleAutor Jeremy Huiskamp
Was Sie beschreiben ist nicht wirklich möglich... also vielleicht müssen Sie nach dem code. Hier ist meine interpretation wht Sie tun:
Die Dokumentation zu compareTo ist hier, die Sie wirklich befolgen sollten, den Vertrag.
InformationsquelleAutor TofuBeer
Erstens möchten Komparator nicht Vergleichbar weil Komparator nimmt zwei Objekte in der Erwägung, dass Vergleichbare vergleicht das aktuelle Objekt zu einer übergeben, und Sie können nicht ändern die compareTo () - Methode auf String oder Integer, also:
Das ist, wie lese ich die Frage: will er Vergleiche Ganzzahlen als Zeichenfolgen. Wenn er will das automatische konvertieren von strings in Ganzzahlen und vergleichen Sie numerisch, dass ist natürlich anders.
InformationsquelleAutor cletus
Unter der Annahme, dass das, was Sie wirklich meinen, ist, dass Sie konvertieren von zahlen in Strings, und dann vergleicht, wird dies nicht funktionieren. Zum Beispiel, sagen wir, Sie haben die ganze Zahl
1234
- und die Integer -1
- und die Integer -2
. Wenn Sie konvertiert diese in Strings und vergleichen Sie Sie, Sie wird den Auftrag bekommen:das ist korrekt für ASCII-Sortierung und falsch für numerische Sortierung. Das heißt, ich nehme an, Ihr code enthält etwas wie:
Warum muss ich diese annehmen? Weil du redest immer ein Falsches Ergebnis und nicht der Rede immer Ausnahmen. Wenn Sie sind eigentlich immer Ausnahmen, dann die andere Poster korrekt sind, dass durch die Umwandlung wird nicht funktionieren.
InformationsquelleAutor Eddie
Ist es wegen der unter java-API-code in
String
Klasse, wo die minimale Länge von chars unter die zwei Strings sind nur im Vergleich.Wenn wir verwenden diese api, um zu vergleichen
zurück negativer Wert sagt ABCD ist weniger als ABZ bedeutet C ist kleiner als Z und ignoriert D in den ersten String.
Vielleicht müssen wir so etwas wie unten
InformationsquelleAutor Kanagavelu Sugumar