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。在平局的情况下,您比较第二个字母,依此类推。笔记: '。' > '9' 和 '-' > '9'

将它们作为数字进行比较的方法是先将它们转换为数字。

于 2012-04-13T12:25:14.120 回答