Or *_*evo 2 java java.util.scanner
我试图创建一个非常简单的程序(这不重要,但是一个扫雷游戏),我遇到了以下问题:当我尝试获取用户输入(带Scanner)时,它第一次工作(第一次转弯) ),但在第二个回合,按下后enter,它会引发以下异常:java.util.NoSuchElementException: No line found.
两个回合之间没有任何变化,我Scanner在每个回合都创建了一个新实例.
代码:
public String nextTurn() {
Scanner scn = new Scanner(System.in);
System.out.print("Please insert your action: ");
StringTokenizer input = new StringTokenizer(scn.nextLine());
scn.close();
//...
}
Run Code Online (Sandbox Code Playgroud)
同样,它在我第一次调用此方法时有效,但在第二次调用时失败.你知道问题可能是什么吗?
System.in 是一个输入流,它接收所有控制台输入.
就像任何输入流一样,它可以被关闭.用户可以关闭它(通过按ctrlD或ctrlZ),但您也可以以编程方式关闭它 - 它是一个Closeable对象.
当您拥有基于输入流的扫描仪并关闭扫描仪时,它会自动关闭位于其后面的输入流.也就是说,当你第一次关闭时scn,你已经关闭了System.in.
下次创建扫描仪时System.in,它基本上是封闭流上的扫描仪.当您尝试调用任何nextXXX方法时,它会告诉您流中没有此类元素.那是因为流已经关闭了.
您应该做的只是在程序开始时打开扫描仪一次,并在程序结束时关闭它一次.您可以继续使用相同的扫描仪 - 实际上不需要为同一输入流打开多个扫描仪.