java.util.Arrays.sort 无法正确对双精度数组进行排序

问题描述 投票:0回答:1

完整测试用例的链接:

测试用例

测试用例由 2500 个值组成,全部大于 0。 我遇到的问题是:它没有正确排序。 既不使用编码排序算法,也不使用 Arrays.sort 函数。

这是怎么发生的以及如何解决这个问题?我得到的结果如下:

输出显示以下内容:

0.0 0.0 0.0 46.0 54.0 118.0 141.0 220.0 259.0 273.0 ...

数组中没有零。此外,测试用例中 3 位数字的数量比排序数组中的要少得多。这是代码片段。

有趣的是:我已经调试了输入,读入输入没有问题,但是排序后,整个数组被破坏,并且值都是不正确的。

这是代码片段:

public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt(); 
            double[] inarr = new double[n];
            double sum = 0;
            
            for (int i = 0; i<n; i++){
                if (sc.hasNextDouble()){
                    inarr[i] = sc.nextDouble();
                }
                
                sum += inarr[i];
            }
            
            // for (int i = 0; i<n; i++){
            //     System.out.println(inarr[i]);
            // }
            
            Arrays.sort(inarr);
            
            for (int i = 0; i<n; i++){
                System.out.println(inarr[i]);
            }

预先感谢您的帮助!

java arrays sorting double
1个回答
2
投票

有一个问题可能是

for (int i = 0; i<n; i++){
    if (sc.hasNextDouble()){
        inarr[i] = sc.nextDouble();
    }
    sum += inarr[i];
} 

我不知道您在什么环境中运行它,但如果您的标准输入有任何问题,您可以跳过此处的值。即,如果

sc.hasNextDouble()
由于任何原因返回
false
,您仍然会增加
i
并且
inarray
中的当前位置保持在
0
...

添加一个计数器并检查您实际读取了多少个值

int readCount = 0;
for (int i = 0; i<n; i++){
    if (sc.hasNextDouble()){
        inarr[i] = sc.nextDouble();
        readCount++;
    }
    sum += inarr[i];
} 
System.out.println(readCount);

就您而言,您可能会收到小于

readCount
n
。同样,由于我们不知道您的环境或如何将数据输入标准输入,因此我无法帮助您解决此问题。但我可以向你保证,
Arrays.sort
不会在数组中创建新数字。

© www.soinside.com 2019 - 2024. All rights reserved.