有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的Bigdecimal数字排序方法无法排序?

问题:我采用了某种排序方法,但结果并不像我预期的那样,我无法理解我可能在哪里出错

我的代码将输入(即数字)作为字符串放入字符串数组,然后在比较它们时将它们转换为Bigdecimal数字,然后在数组中将它们作为字符串进行相应的重新排列

问题代码:

 String s[]={-100, 50, 0, 56.6, 90, 0.12, .12, 02.34, 000.000};

    for(int i=0;i<n-1;i++)
        {
            for (int j =i+1; j<n; j++) 
             {
              BigDecimal  d = new BigDecimal(s[j]); 
              BigDecimal a = new BigDecimal(s[i]);
                if(a.compareTo(d)==-1) 
                    {
                        String m = s[j];
                        s[j]=s[i];
                        s[i]=m;
                    }
              }
        }
         //output :90, 56.6, 50, 02.34, .12, 0.12, 0, 000.000, -100

        //expected output :90, 56.6, 50, 02.34, 0.12, .12, 0, 000.000, -100

约束:s[n]应该是一个字符串数组,如果两个输入具有相同的值,那么它们应该按照我们输入它们的相同顺序列在数组中

我不明白为什么0.12和.12的输出顺序与我输入的不一样,如果算法出了问题,那么即使是0和000.000也不应该与我输入的顺序相同,但它们确实出现了


共 (2) 个答案

  1. # 1 楼答案

    您可以使用Stream并将自定义比较器传递给sorted,然后collect并打印。像

    String s[] = { "-100", "50", "0", "56.6", "90", "0.12", ".12", "02.34", "000.000" };
    System.out.println(Stream.of(s)
            .sorted((a, b) -> new BigDecimal(b).compareTo(new BigDecimal(a)))
            .collect(Collectors.joining(", ")));
    

    我得到(按要求)

    90, 56.6, 50, 02.34, 0.12, .12, 0, 000.000, -100
    
  2. # 2 楼答案

    好吧,因为你想使用字符串数字,你必须用引号把它们括起来,但是你的排序可以更容易阅读。我建议如下

        String[] numbers ={"-100", "50", "0", "56.6", "90", "0.12", ".12", "02.34", "000.000"};
        List<BigDecimal> decimalList = new ArrayList<>();
        for(String s: numbers){
            decimalList.add(new BigDecimal(s));
        }
        Collections.sort(decimalList);
        Collections.reverse(decimalList);     // edit , forgot this line
        decimalList.forEach(System.out::println);