我做了一个像自动售货机的程序!
我的代码类似于:
public static void main (String [] args) {
Scanner sc = new Scanner (System.in);
while(sc.hasNext()) {
String string = sc.next();
sum = generateSum(sum)
.....
}
}
public static int generateSum(int sum) {
Scanner sc = new Scanner (System.in);
while (sc.hasNext()) {
....
}
return sum;
}
很抱歉简化我的代码,但正常的代码很长!但问题是我使用while (sc.hasNext())
循环两次。基本上我想继续我的main方法,直到用户输入为TERMINATE,但我的程序在运行一次后终止。
我想如果我拿出我的generateSum
方法,那么我的main方法中的循环工作正常,所以我想它必须与while (sc.hasNext())
循环两次有关。
我有什么想法可以解决问题吗?
答案 0 :(得分:1)
hasNext()
方法将一直阻塞,直到你点击System.in
上的文件结束标记,因为它不知道是否有更多输入,直到它读取完整的缓冲区值或命中文件末尾(您可以通过Windows上的Control-Z和unix上的Control-D发出信号)。此时System.in
位于EOF标记处,无法从代码中重新打开它。
如果您需要处理来自System.in
的多个数据流,您将不得不使用某种类型的标记值(例如单词END)来标记一个输入流的结尾和另一个输入流的开头
答案 1 :(得分:0)
我很确定如果您使用sc.next()消耗了正在扫描的输入,则状态会发生变化并且hasNext()会相应地返回。问题可能就在那里。
答案 2 :(得分:0)
可以根据需要调用hasNext()
方法。但是如果在内部循环中调用next()
方法,则可以使用外循环中的值。
所以内部循环最有可能在hasNext()
为假之后中断,因此外部循环也会完成。