为什么这种排序方法对某些输入有不同的表现?

Why does this sorting method behave differently for certain inputs?

正如问题标题所暗示的那样,我无法理解为什么我的排序方法对于单独的输入表现不同

问题限制:一个字符串数组用于输入n个数字,然后按降序重新排列,如果遇到数字相等000.0.0 之类的值,它们应该按照我输入它们的顺序列出,并且也应该按照输入的相同格式输出。

我的问题: 对于 n=2 当我输入 0.12,.12 时,我的代码输出 0.12, .12,但是对于 n=3当我输入 1, 0.12,.12 它输出 1,.12, 0.12(而不是 1,0.12,.12) 那么,为什么会发生这种情况?对我的代码稍作修改是否可以纠正此故障?

代码:

String[] s= new String[n];
     //input :
for(int i=0;i<n;i++)
    s[i]=sc.next();
      //Sorting :
for(int i=0;i<n;i++)
{
    BigDecimal  d=new BigDecimal(s[i]); 
    for (int j =i+1; j<n; j++) 
    {
        BigDecimal a=new BigDecimal(s[j]);
        if(d.compareTo(a)==-1) 
        {
             String m = s[j];
             s[j]=s[i];
             s[i]=m;
         }
    }
}
//Output :
for(int i=0;i<n;i++)
    System.out.println(s[i]);

compareto方法在处理Bigdecimal类型数字时认为0.12.12相等,但在处理String类型变量时不考虑.120.12 相等,所以在比较时我只将它们转换为 Bigdecimal 类型,但是为了显示我将它们保留为 Strings 因为 Bigdecimal 类型四舍五入.120.12 相同,但 Strings 不同。

似乎工作正常,使用测试代码:

import java.io.*;
import java.math.*;

class test {
    public static void main(String[] args){
        String[] s= {"1","0.12",".12"};
        int n = 3;

        for(int i=0;i<n;i++){

                BigDecimal  d=new BigDecimal(s[i]);

                for (int j =i+1; j<n; j++){

                  BigDecimal a=new BigDecimal(s[j]);

                        if(d.compareTo(a)==-1){
                            String m = s[j];
                            s[j]=s[i];
                            s[i]=m;

                        }
                    }
                }
                  //Output :
                     for(int i=0;i<n;i++)
                System.out.println(s[i]);

    }

}

你可以在这里看到:

https://www.jdoodle.com/a/cGZ