2012-04-13 19 views
0

私はnumbという配列を持っています。 5つの数字(ユーザーの入力から)が入っています。入力値の例は、5,29,101,100,89.4です。私はこの配列の要素をtsというTreeSetというforループを使って転送します(要素を降順で並べます)。この後、私はこのTreeSetの要素をMessageDialogを使って表示します。しかし、ディスプレイは私が期待しているものとは違ったものを示しています。 [89.4,5,29,101,100]と表示されます。TreeSetの順序付けエラー

同じ場所の値で数字を入れた場合(たとえば、配列に12,5,6,84,74,65のような数字だけが含まれている場合)、数十、数百といったように、予想どおりに注文します。私は何が間違っているのか分からない。ここで

はコードです:

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

文字列と数字のソート順が同じではありません。 – Perception

+3

文字列は数字と同じ方法でソートされません。それはあなたの問題だ。これはバグではありません。それは文字列の字句比較を理解することができません。 – duffymo

答えて

2

あなたは数値を文字列に変換しているため、数字の自然順序付けが、「10」は「2」よりも小さい文字列の自然順序付けを得ることはありません最初の文字が小さいためです。

変更Numberに設定ツリーの内容又はDoubleような特定の数の種類と数に配列要素を解析し、
例えばDouble.parseDouble()new DecimalFormat().parse()などを使用してください。

0

文字列を比較すると、最初の文字から比較されます。つまり、このような「数字」を考える必要があります。逆の順序であなたが同数の場合の最初の文字又は数字8> 5> 2> 1を比較

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

ファーストを有することができ、あなたは2番目の文字とを比較します。注意: '。' > '9'と ' - '> '9'

これらを数値として比較する方法は、最初に数値に変換することです。

関連する問題