我正在使用Java来解决SPOJ(http://www.spoj.pl)问题,其中很多问题显然是使用控制台输入。问题是,他们中的一些人没有说会有多少行输入,所以当我没有更多时,我可以关闭程序。我正在使用Scanner:
Scanner s = new Scanner(System.in);
String str = s.nextLine();
不幸的是,它不会读取下一行,但是......等待用户输入,然后获取下一行。
也是如此s.hasNext();
因此我不知道何时完成该计划。有没有办法在没有等待的情况下读取输入行?
答案 0 :(得分:1)
它在竞争编程问题上几乎是一个标准,为他们提供输入规范(我相信你知道)。我查看了网站上的一些问题,并指出了这些问题。没有完整的规范,您是否有问题的链接?
在这种情况下,通过电子邮件发送管理员来更新规范会很有用。除此之外,如果你已经到达输入的末尾,Scanner.hasNextLine()
应该返回false。
更新输入是从文件传输的,因此hasNextLine()
应该按照需要运行。到目前为止它对你没有用吗?你确定你的代码在其他方面没有花太长时间吗?
答案 1 :(得分:0)
你这是错误的。你必须继续阅读,直到没有输入,输入结束被定义为null。等待超时所花费的时间将导致您的代码失败欺骗测试 - spoj对速度非常严格。
说我给你以下问题:
给出一个整数列表,每个整数都在自己的行上,打印出所有整数的总和。
1
2
3
4
5
我们不知道是否或什么时候会有更多的输入。关键是没有人坐在那里输入数字。输入直接从文件传送到程序,并以null结尾(如文件所示)。
对于spoj应该起作用的是:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = "";
int sum = 0;
while ((line = br.readLine()) != null) {
sum += Integer.parseInt(line);
}
System.out.println(sum);
如果有一些我遗漏的奇怪的诈骗案例,我请求你用spoj问题对此进行评论,我将告诉你如何阅读输入。绝对不是定时器或线程或任何愚蠢的东西。
答案 2 :(得分:0)
如果你没有使用智能算法来找到解决方案,有些问题会花费太多时间。我会建议:
NZEC
(以及其他错误代码)的含义。他们有一个forum 我建议将输入流作为函数的参数传递 工作并将文件作为程序的可选参数。创建多个文件输入,在文件输入流上测试代码,并尝试检测影响程序运行时间的因素。
答案 3 :(得分:-1)
制作一个计时器变量
Scanner s = new Scanner(System.in);
// Start timer here
String str = s.nextLine();
//If a next line is read, reset timer.
向计时器添加一个事件,如果它到期,程序将关闭。