完整测试用例的链接:
测试用例由 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]);
}
预先感谢您的帮助!
有一个问题可能是
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
不会在数组中创建新数字。