为什么扫描仪不提示我输入?

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 对象只需要在流中作为参数。