为什么我的 Bigdecimal 数排序方法无法排序?
Why does my sorting method for Bigdecimal numbers fails to sort?
问题 : 我使用了某种排序方法,但它没有像我预期的那样工作,我不明白我可能在哪里出错。
我的代码将输入(数字)作为字符串转换为字符串数组,然后在比较它们时将它们转换为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 也不应该按照我输入的顺序出现他们,但他们这样做了。
好吧,既然您想使用字符串数字,就必须将它们用引号引起来,但您的排序可读性更高。我建议如下
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);
您可以使用 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
问题 : 我使用了某种排序方法,但它没有像我预期的那样工作,我不明白我可能在哪里出错。
我的代码将输入(数字)作为字符串转换为字符串数组,然后在比较它们时将它们转换为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 也不应该按照我输入的顺序出现他们,但他们这样做了。
好吧,既然您想使用字符串数字,就必须将它们用引号引起来,但您的排序可读性更高。我建议如下
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);
您可以使用 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