如何通过扫描仪

时间:2016-09-20 11:15:47

标签: java

我想阅读UVA Online Judge问题中的所有测试用例。测试用例除以空行。例: 11 20 1 2 3 6 8 12 13 13 15 16 17 18 19 20 20 21 25 26 三十 31

12 20 1 2 3 6 8 12 13 13 15 16 17 18 19 20 20 21 25 26 三十 31

17 20 1 2 3 6 8 12 13 13 15 16 17 18 19 20 20 21 25 26 三十 31

while(sc.hasNextLine())
    {
        numberOfYears = sc.nextInt();
        numberOfPopes = sc.nextInt();

        years = new ArrayList<Integer>();

        for(int i = 0; i < numberOfPopes; i++)
        {
           years.add(sc.nextInt());
        }

        p = new ProblemPope(numberOfYears, numberOfPopes, years);

    }

我知道,扫描仪等待另一行或想要CTRL + Z或CTRL + D.我只是想知道在阅读完所有测试用例后是否有办法结束它。 扫描仪有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

我认为你正在寻找这个:

while (true) {

    if(!sc.hasNext())
        break;

    ...
}

或简单地说:

while(sc.hasNext()) {
    ...
}

答案 1 :(得分:0)

您可以使用sc.close()关闭扫描仪以阅读输入

答案 2 :(得分:0)

如果不检查hasNext(),hasNextLine()或hasnextInt()获取所有输入,则代码可能会以运行时错误结束。

<强>但是 通常,第一大输入将是大多数在线竞赛中的测试用例数。所以你可以像以下一样使用它。

 int testCaseCount= sc.nextInt();
 for(int testCase=0; testcase < testCaseCount; testCase++){
        numberOfYears = sc.nextInt();
        numberOfPopes = sc.nextInt();
    years = new ArrayList<Integer>();

    for(int i = 0; i < numberOfPopes; i++)
    {
       years.add(sc.nextInt());
    }

    p = new ProblemPope(numberOfYears, numberOfPopes, years);
}

但是如果输入没有指定测试用例的数量,那么它就不会动态输入。

即从文件中测试。在这种情况下,sc.hasNextLine()应该可以工作。

如果两者都不起作用,请提及问题的链接,以便我可以验证问题所在。