在java中排序加倍

时间:2013-07-31 16:52:17

标签: java sorting double

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
    BufferedReader in = new BufferedReader(new FileReader(new File(args[0])));
    String line;

    while ((line = in.readLine()) != null) {
        StringTokenizer st = new StringTokenizer(line);
        int len = st.countTokens();
        Double[] seq = new Double[len];
        for (int i = 0; i < len; i++)
            seq[i] = Double.parseDouble(st.nextToken());
        Arrays.sort(seq);
        for (int i = 0; i < len; i++) {
            if (i > 0) System.out.print(" ");
            System.out.print(seq[i]);
        } System.out.print("\n");
    }
}
}

所以我试图解决这个CodeEval问题(https://www.codeeval.com/open_challenges/91/)并且我的解决方案没有通过所有测试用例。我认为我的输出方法是正确的(数字之间的空格,尾随换行符)。我无法弄清楚排序或其他任何地方可能发生的事情。

使用花车时,解决方案显然不正确。

3 个答案:

答案 0 :(得分:2)

您可能正确排序但打印不正确。十进制数近似表示。运行时尝试以短格式显示它们,但这不能保证。

他们提供的所有示例都应该有效,但谁知道测试套件在后台做了什么。

答案 1 :(得分:2)

我也认为这是一个印刷问题。根据样本I / O,输出似乎要求在每个数字上精确 3个小数位。但是,如果您打印出70.920(其中一个示例输入)之类的双重内容,则会显示为70.92

double d = 70.920;
System.out.println(d);
System.out.printf("%.3f", d);  // <-- try this
70.92
70.920

注意第二个输出如何与样本输出的格式一致,而第一个输出不是。

答案 2 :(得分:1)

我会使用double而不是Double我只会在读完所有内容之后对值进行排序,而不是在每一行之后。

也许某些输入有多行?