我有一个简单的方法,可以将命令打印到屏幕上,扫描用户的输入,并将其作为字符串返回。如果用户的输入无效,它会通知用户并再次询问。此方法运行良好,但我的导师提到我们应该始终关闭资源,因此我返回并添加了 close 方法,现在每次调用该方法时,无论用户输入如何,我都会收到 NoSuchElementException。这是代码...
private String getUserString(String userCommand) {
System.out.println(userCommand);
Scanner scan = new Scanner(System.in);
String userinput = scan.nextLine().trim();
if (userinput.isEmpty()){
System.out.println("Invalid choice");
return getUserString(userCommand);
}
else {
return userinput;
}
}
异常总是指向用户输入作为 scan.nextLine().trim() 启动的行
注意* 我在每个 return 语句之前的每一行添加了 scan.close() ,但是我没有在上面包含它。
当你关闭时scan
你正在关闭System.in
当您尝试重新读取它时,它会抛出异常。
你的导师一方面是对的,你应该清理资源,只是not到那个时刻System.in
.
您可以创建自己的输入,而不是每次需要输入时重新打开流Scanner
一次并在需要输入的地方重复使用它:
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
System.out.println(getUserString("Write something:", scan));
System.out.println(getUserString("Write something else:", scan));
}
private static String getUserString(String userCommand, Scanner scan) {
System.out.println(userCommand);
String userinput = scan.nextLine().trim();
if (userinput.isEmpty()) {
System.out.println("Invalid choice");
return getUserString(userCommand, scan);
} else {
return userinput;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)