作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图创建一个非常简单的程序(没关系,但扫雷游戏),我遇到了以下问题:当我尝试获取用户输入时(使用 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();
//...
}
同样,当我第一次调用此方法时它有效,但在第二次调用时失败。您知道问题出在哪里吗?
最佳答案
System.in
是一个输入流,接收所有控制台输入。
就像任何输入流一样,它可以被关闭。用户可以关闭它(通过按 ctrlD 或 ctrlZ),但您也可以通过编程方式关闭它- 它是一个 Closeable
对象。
当你有一个基于输入流的扫描器时,当你关闭扫描器时,它也会自动关闭位于它后面的输入流。也就是说,在您第一次关闭 scn
时,您已经关闭了 System.in
。
下次您在 System.in
上创建扫描器时,它基本上是一个封闭流上的扫描器。当您尝试调用任何 nextXXX
方法时,它会告诉您流中没有这样的元素。那是因为流已经关闭了。
您应该做的是只在程序开始时打开扫描仪一次,然后在程序结束时关闭它一次。您可以继续使用同一个扫描器——实际上不需要为同一个输入流打开多个扫描器。
关于java.util.NoSuchElementException : No line found - Reading user input works only once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28395019/
我是一名优秀的程序员,十分优秀!