我想阅读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.我只是想知道在阅读完所有测试用例后是否有办法结束它。 扫描仪有没有办法做到这一点?
答案 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()应该可以工作。
如果两者都不起作用,请提及问题的链接,以便我可以验证问题所在。