首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TreeSet排序错误

TreeSet排序错误
EN

Stack Overflow用户
提问于 2012-04-13 19:48:45
回答 2查看 391关注 0票数 0

我有一个名为numb的数组。它包含5个数字(来自用户的输入)输入值的示例为: 5,29,101,100,89.4。我使用for循环将这个数组的元素转移到一个名为tsTreeSet中(我按降序排列元素)。在此之后,我使用MessageDialog显示此TreeSet的元素。但显示结果与我预期的有所不同。它显示[89.4,5,29,101,100]

当我输入具有相同位数值的数字时-比如十进制,百进制(如果数组只包含12,56,84,74,65这样的数字),它就会按预期进行排序。我不知道我做错了什么。

代码如下:

代码语言:javascript
复制
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);
  }  
}
EN

回答 2

Stack Overflow用户

发布于 2012-04-13 19:53:10

您将数字转换为字符串,因此得到的不是数字的自然排序,而是字符串的自然排序,其中"10“小于"2",因为第一个字符较小。

将树集合的内容更改为NumberDouble等特定数字类型,并将数组元素解析为数字。

例如通过使用Double.parseDouble()new DecimalFormat().parse()等。

票数 2
EN

Stack Overflow用户

发布于 2012-04-13 20:25:14

当您比较字符串时,它是从第一个字符开始。这意味着你需要像这样思考“数字”。在相反的顺序中,您可以使用

代码语言:javascript
复制
-9.9
-1e1
-100
89.4
899.5
5
29
101
100
05
005.0
0059

首先比较第一个字母或数字8>5>2> 1。如果是平局,则比较第二个字母,依此类推。注意:‘.> '9’和'-‘> '9’

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10140234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档