.12 和 0.12 在按降序排序时被交换。实际上,如果存在相同的数字,则必须按照接收顺序打印它们。
Java的BigDecimal 类可以处理任意精度的有符号十进制 数字。让我们测试您对它们的了解!
给定一个数组,
s
n
实数字符串,按降序排序 订购 - 但等等,还有更多!每个数字必须打印在 与从 stDIN 读取的格式完全相同,这意味着.1
打印为.1
,0.1
打印为0.1
。如果两个数字代表 数值等效值(例如.1==0.1
),则必须列出它们 按照与接收它们作为输入相同的顺序)。
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] s = new String[n + 2];
for (int i = 0; i < n; i++) {
s[i] = sc.next();
}
sc.close();
BigDecimal[] d = new BigDecimal[n];
for (int i = 0; i < n; i++) {
d[i] = new BigDecimal(s[i]);
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (d[j].compareTo(d[i]) == 1) {
BigDecimal t = d[i];
d[i] = d[j];
d[j] = t;
String stmp = s[i];
s[i] = s[j];
s[j] = stmp;
}
}
}
// Output
for (int i = 0; i < n; i++) {
System.out.println(s[i]);
}
输入:
9
-100
50
0
56.6
90
0.12
.12
02.34
000.000
预期产出:
90
56.6
50
02.34
0.12
.12
0
000.000
-100
实际输出:
90
56.6
50
02.34
.12
0.12
0
000.000
-100
我重新命令尝试这样的代码:
import java.math.BigDecimal;
import java.util.*;
class Solution{
public static void main(String []argh)
{
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();
String []s=new String[n];
for(int i=0;i<n;i++)
{
s[i] = sc.next();
}
Arrays.sort(s, new Comparator<Object>() {
@Override
public int compare(Object a1, Object a2) {
BigDecimal bigDec1 = new BigDecimal((String)a1);
BigDecimal bigDec2 = new BigDecimal((String)a2);
return bigDec2.compareTo(bigDec1);
}
});
for(int i=0;i<n;i++)
{
System.out.println(s[i]);
}
}
}
使用比较器的简单排序即可解决所有问题。