0

という配列がありnumbます。これには、(ユーザーの入力からの)5つの数値が含まれます。入力値の例は、5,29,101,100,89.4です。この配列の要素をforループを使用してTreeSet呼び出されたものに転送tsします(要素を降順で配置します)。TreeSetこの後、。を使用してこの要素を表示しMessageDialogます。しかし、ディスプレイには私が期待しているものとは異なる何かが表示されます。を表示します[89.4,5,29,101,100]

同じ場所の値(数十、数百など)の数値を入力すると(配列に12,56、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);
  }  
}
4

2 に答える 2

2

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

ツリーセットの内容を、Numberまたはのような特定の数値タイプに変更しDouble、配列要素を数値に解析します。
たとえばDouble.parseDouble()new DecimalFormat().parse()などを使用します。

于 2012-04-13T11:53:10.283 に答える
0

文字列を比較すると、最初の文字からです。つまり、「数字」をこのように考える必要があります。逆の順序であなたが持つことができます

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

まず、最初の文字または数字を比較します 8 > 5 > 2 > 1. 同点の場合は、2 番目の文字を比較します。ノート: '。' > '9' および '-' > '9'

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

于 2012-04-13T12:25:14.120 に答える