为什么扫描仪不提示我输入?
Why won't the scanner prompt me for an input?
我有这个方法:
public String scanInput()
{
String input = "";
Scanner skanner = new Scanner(System.in);
while(skanner.hasNextLine()){
input = skanner.nextLine();
}
skanner.close();
return input;
}
第一次使用此方法时 运行,程序停止,系统提示我在控制台中进行输入,然后才能继续。然而,第二次方法是运行,一闪而过,没有停顿,我的程序陷入了死循环。
此方法中的哪一行使程序暂停,为什么只在第一次暂停?
skanner.hasNextLine()
returns 在这种情况下为 false,因为它不是从 file/website 等中读取的
您将在该方法即将结束时关闭扫描仪。这将关闭它正在处理的流 - 在本例中为 System.in
。这意味着下次您调用该方法时,流仍然关闭,因此没有行。
您应该设置 one Scanner
,然后将其传递到方法中(或者将其作为 class 中的状态)。
您的程序在第二次没有暂停的情况下闪烁的原因是 运行 是因为 System.in
已关闭 - 关闭 Scanner
对象将关闭基础流。
正如 Jon 所提到的,扫描器确实应该在此函数之外设置一次,然后传递到方法中。
回答您的第二个问题 - 导致程序暂停的行是 .nextLine()
调用。 nextLine()
就是所谓的 "blocking function"。
现在,您的代码只能运行一次,因为 System.in
本质上是控制台。你不能 "open" System.in
。关闭的流无法重新打开。
是的,每次调用该函数时都会创建一个新的 Scanner
- 但是创建 Scanner
对象不会创建新流 - Scanner
对象只需要在流中作为参数。
我有这个方法:
public String scanInput()
{
String input = "";
Scanner skanner = new Scanner(System.in);
while(skanner.hasNextLine()){
input = skanner.nextLine();
}
skanner.close();
return input;
}
第一次使用此方法时 运行,程序停止,系统提示我在控制台中进行输入,然后才能继续。然而,第二次方法是运行,一闪而过,没有停顿,我的程序陷入了死循环。
此方法中的哪一行使程序暂停,为什么只在第一次暂停?
skanner.hasNextLine()
returns 在这种情况下为 false,因为它不是从 file/website 等中读取的
您将在该方法即将结束时关闭扫描仪。这将关闭它正在处理的流 - 在本例中为 System.in
。这意味着下次您调用该方法时,流仍然关闭,因此没有行。
您应该设置 one Scanner
,然后将其传递到方法中(或者将其作为 class 中的状态)。
您的程序在第二次没有暂停的情况下闪烁的原因是 运行 是因为 System.in
已关闭 - 关闭 Scanner
对象将关闭基础流。
正如 Jon 所提到的,扫描器确实应该在此函数之外设置一次,然后传递到方法中。
回答您的第二个问题 - 导致程序暂停的行是 .nextLine()
调用。 nextLine()
就是所谓的 "blocking function"。
现在,您的代码只能运行一次,因为 System.in
本质上是控制台。你不能 "open" System.in
。关闭的流无法重新打开。
是的,每次调用该函数时都会创建一个新的 Scanner
- 但是创建 Scanner
对象不会创建新流 - Scanner
对象只需要在流中作为参数。