我有这个方法:
public String scanInput()
{
String input = "";
Scanner skanner = new Scanner(System.in);
while(skanner.hasNextLine()){
input = skanner.nextLine();
}
skanner.close();
return input;
}
第一次运行此方法时,程序会停止,我会在控制台中提示输入,然后才能继续。但是,第二次运行该方法时,它会在没有暂停的情况下闪烁,并且我的程序陷入无限循环。
此方法中的哪一行会使程序暂停,为什么它只在第一次暂停?
答案 0 :(得分:7)
您在方法结束时关闭了扫描仪。在这种情况下,关闭了它正在处理的流 - System.in
。这意味着下次调用方法时,流仍然关闭,因此没有行。
您应该设置一个 Scanner
,并将其传递给方法(或将其作为您班级中的状态)。
答案 1 :(得分:4)
程序在第二次运行时没有暂停而闪烁的原因是因为System.in
已关闭 - 关闭Scanner
对象将关闭基础流。
正如Jon所提到的,扫描仪应该在这个函数之外设置一次,并传递给方法。
要回答第二个问题 - 导致程序暂停的行是.nextLine()
电话。 nextLine()
是所谓的“阻塞函数”。
现在,您的代码只能运行一次,因为System.in
本质上是控制台。你不能“打开”System.in
。 >重新打开关闭的流 。
是的,每次调用函数时都会创建一个新的Scanner
- 但是使Scanner
对象不会生成新的流 - Scanner
对象只接受一个流作为参数。
答案 2 :(得分:-2)
skanner.hasNextLine()
返回false,因为它不能从文件/网站等中读取。