用 Java 重新创建扫描仪
Posted
技术标签:
【中文标题】用 Java 重新创建扫描仪【英文标题】:Recreating Scanner in Java 【发布时间】:2019-10-07 09:06:38 【问题描述】:我正在用 java 编写游戏,我有一个方法要求用户从控制台输入值:
public String getUserInput()
try (Scanner scan = new Scanner(System.in))
String s = scan.nextLine();
return s;
问题是我想调用这个方法不同的次数取决于外部参数,我事先不知道,我会再次调用还是不调用。
但是当我为第二次调用调用这样的方法时 - 我得到了
Exception in thread "main" java.util.NoSuchElementException: No line found
问题:
我不明白这个错误的根本原因:我知道我不能 重新打开扫描仪,但在这里我没有重新打开它,而是重新创建它。 我该如何处理?【问题讨论】:
看看这篇文章,它会告诉你为什么会出现这个错误:using scanner with try-with-resources 【参考方案1】:不要重新打开或重新创建它。在您的程序期间使用一个Scanner
。
关闭Scanner
(在本例中,使用try-with-resources
块)将关闭其输入,在本例中为System.in
。您不想关闭它,因为您无法重新打开它。
【讨论】:
是的,但是什么时候关闭呢?我应该在程序结束时手动关闭它吗?但是如果我的程序以异常结束,在这种情况下扫描仪将不会关闭 是的,你应该在最后手动关闭它。如果你的程序异常结束,Scanner
也会消失。一旦你的程序消失了,它就不会继续存在了。
不,(我不建议)关闭扫描仪(在这种情况下),因为它也会关闭System.in
,而你真的不想这样做。让JVM来处理以上是关于用 Java 重新创建扫描仪的主要内容,如果未能解决你的问题,请参考以下文章