2012-04-13 16 views
0

Ich habe ein Array namens numb. Es enthält 5 Zahlen (von einer Benutzereingabe) Ein Beispiel für Eingabewerte sind: 5,29,101,100,89.4. Ich übertrage die Elemente dieses Arrays in eine TreeSet namens ts mit einer for-Schleife (ich ordne die Elemente in absteigender Reihenfolge). Danach zeige ich dann Elemente dieser TreeSet mit einem MessageDialog. Aber das Display zeigt etwas anderes als das, was ich erwarte. Es zeigt [89.4,5,29,101,100] an.TreeSet Bestellfehler

Wenn ich Zahlen mit dem gleichen Stellenwert einfüge - wie Zehner, Hunderter (wenn das Array nur Zahlen wie 12,56,84,74,65 enthält), sortiert es wie erwartet. Ich weiß nicht, was ich falsch mache.

Hier ist der Code:

import javax.swing.*; 
import java.util.*; 

public class dollarGUI { 

    public static void main(String[] agrs){ 
    Hello hello=new Hello(); 
    hello.as(); 
    hello.Order(); 
    hello.Display(); 
    } 
} 

class Hello { 

    String[]be = new String[5]; 
    TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder()); 

    public String[] as() { 
    for(int i=0; i < 5; i++) { 
     be[i] = JOptionPane.showInputDialog("enter number"); 
    } 
    return be; 
    } 

    public void Order() { 
    for(int i=0;i<5;i++) { 
     ts.add(be[i]); 
    } 
    } 

    public void Display() { 
    JOptionPane.showMessageDialog(null, ts); 
    } 
} 
+0

Strings und Nummern haben nicht die gleiche Sortierreihenfolge. – Perception

+3

Strings sortieren nicht genauso wie Zahlen. Das ist dein Problem. Es ist kein Fehler. Es ist ein Versäumnis, den lexikalischen Vergleich von Strings zu verstehen. – duffymo

Antwort

2

Sie die Zahlen in Strings konvertiert werden und somit nicht bekommen, die natürliche Ordnung der Zahlen, sondern die natürliche Ordnung der Saiten, wo „10“ kleiner als „2“ , da das erste Zeichen kleiner ist.

Ändern der Inhalt des Baumes auf Number oder einer bestimmten Anzahl Typ wie Double und die Array-Elemente parsen Zahlen,
z.B. Double.parseDouble(), new DecimalFormat().parse() etc ..

0

Wenn Sie Zeichenfolgen vergleichen, ist es aus dem ersten Zeichen. Das bedeutet, dass Sie an die "Zahlen" denken müssen. In umgekehrter Reihenfolge können Sie haben

-9.9 
-1e1 
-100 
89.4 
899.5 
5 
29 
101 
100 
05 
005.0 
0059 

Zuerst Sie den ersten Buchstaben oder die Ziffer 8> 5> 2> 1. Im Falle eines Unentschiedens vergleichen, vergleichen Sie den zweiten Buchstaben und so weiter. Hinweis: '.' > '9' und '-'> '9'

Der Weg, diese als Zahl zu vergleichen, besteht darin, sie zuerst in Zahlen umzuwandeln.

Verwandte Themen