我有一个名为numb的数组。它包含5个数字(来自用户的输入)输入值的示例为: 5,29,101,100,89.4。我使用for循环将这个数组的元素转移到一个名为ts的TreeSet中(我按降序排列元素)。在此之后,我使用MessageDialog显示此TreeSet的元素。但显示结果与我预期的有所不同。它显示[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);
}
}发布于 2012-04-13 19:53:10
您将数字转换为字符串,因此得到的不是数字的自然排序,而是字符串的自然排序,其中"10“小于"2",因为第一个字符较小。
将树集合的内容更改为Number或Double等特定数字类型,并将数组元素解析为数字。
例如通过使用Double.parseDouble()、new DecimalFormat().parse()等。
发布于 2012-04-13 20:25:14
当您比较字符串时,它是从第一个字符开始。这意味着你需要像这样思考“数字”。在相反的顺序中,您可以使用
-9.9
-1e1
-100
89.4
899.5
5
29
101
100
05
005.0
0059首先比较第一个字母或数字8>5>2> 1。如果是平局,则比较第二个字母,依此类推。注意:‘.> '9’和'-‘> '9’
将它们作为数字进行比较的方法是先将它们转换为数字。
https://stackoverflow.com/questions/10140234
复制相似问题