我已经做了一些研究,但我一无所获。
所以这是我的代码:
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();
}
第一次进入此功能时,一切正常,但下次,它会在我的功能的第3行抛出NoSuchElementException
。
另一件事:当我删除sc.close()
行时,问题就会消失,但我想保留该行。
任何解决方案?感谢
答案 0 :(得分:3)
如果您关闭Scanner
,它也会关闭基础输入流,即System.in
。所以你无法关闭它。
答案 1 :(得分:0)
不要关闭Scanner这是问题所在。它将关闭基础输入流
sc.close();
答案 2 :(得分:0)
如果此扫描仪尚未关闭,则表明其底层 可读也实现了Closeable接口,然后是可读的 将调用close方法。如果此扫描仪已经关闭,那么 调用此方法将无效。
System.in
是InputStream
,它实现了Closeable
。
这意味着在close()
上调用sc
会调用close()
的{{1}}方法,该方法会关闭输入流并释放与之关联的所有系统资源。