0

我已经进行了一些研究,但我一无所获。

所以这是我的代码:

public void play(){
    System.out.print("Make your choice ( R - P - S) : ");
    Scanner sc = new Scanner(System.in);
    char choice = sc.next().charAt(0);
    setChoice(choice);
    sc.close();
}

我第一次进入这个函数时,一切正常,但下一次,它抛出 NoSuchElementException了我函数的第 3 行。另一件事:当我删除sc.close()行时,问题消失了,但我想保留该行。

有什么解决办法吗?谢谢

4

3 回答 3

3

如果关闭 a Scanner,它也会关闭底层输入流,即System.in. 所以你不能关闭它。

于 2013-03-16T12:38:05.263 回答
0

不要关闭扫描仪这是这里的问题。它将关闭底层输入流

sc.close();
于 2013-03-16T12:38:44.843 回答
0

Scanner.close

如果这个扫描器还没有关闭,那么如果它的底层可读也实现了 Closeable 接口,那么可读的 close 方法将被调用。如果此扫描仪已关闭,则调用此方法将无效。

System.in是一个InputStream实现Closeable

这意味着调用close()on会sc调用close()的方法System.in,该方法会关闭输入流并释放与其关联的任何系统资源。

于 2013-03-16T12:43:06.690 回答