为什么这种排序方法对某些输入有不同的表现?
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
类型变量时不考虑.12
和 0.12
相等,所以在比较时我只将它们转换为 Bigdecimal
类型,但是为了显示我将它们保留为 Strings
因为 Bigdecimal
类型四舍五入.12
与 0.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]);
}
}
你可以在这里看到:
正如问题标题所暗示的那样,我无法理解为什么我的排序方法对于单独的输入表现不同
问题限制:一个字符串数组用于输入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
类型变量时不考虑.12
和 0.12
相等,所以在比较时我只将它们转换为 Bigdecimal
类型,但是为了显示我将它们保留为 Strings
因为 Bigdecimal
类型四舍五入.12
与 0.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]);
}
}
你可以在这里看到: