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

时间:2015-03-09 19:09:48

标签: java loops console java.util.scanner

我有这个方法:

public String scanInput()
{
    String input = "";
    Scanner skanner = new Scanner(System.in);
    while(skanner.hasNextLine()){
        input = skanner.nextLine();
    }
    skanner.close();
    return input;
}

第一次运行此方法时,程序会停止,我会在控制台中提示输入,然后才能继续。但是,第二次运行该方法时,它会在没有暂停的情况下闪烁,并且我的程序陷入无限循环。

此方法中的哪一行会使程序暂停,为什么它只在第一次暂停?

3 个答案:

答案 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,因为它不能从文件/网站等中读取。