【发布时间】:2018-04-17 06:41:52
【问题描述】:
问题:我采用了某种排序方法,但没有达到我的预期,我不明白我可能在哪里出错。
我的代码将输入(即数字)作为字符串转换为字符串数组,然后在我比较它们时将它们转换为 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 也不应该以我输入它们的顺序出现,但他们确实做到了。
【问题讨论】:
-
为什么你的字符串数组不包含字符串?
-
其实是问题限制,数字必须作为字符串输入
-
不要重新发明排序。只需将您的字符串包装到一个包含字符串及其十进制等效项的对象中,然后对这些对象进行排序,然后提取字符串。
-
@ArnavDas 使代码更简单以使问题更易于理解不是问题。但这并不意味着它不应该编译。您将整数和数字存储在 String 数组中,因此无法编译。
-
@ArnavDas 我想找出答案的唯一方法就是自己调试。在它拥有的这么多步骤中的某个时刻,它会切换“0.12”、“.12”位置。也许尝试一个较小的阵列。也许只是 "0","90","0.12", ".12" 。我猜到那时你会找到答案的。
标签: java arrays string sorting bigdecimal