gpt4 book ai didi

java - 调用 Scanner.close() 抛出 nosuchelementexception

转载 作者:搜寻专家 更新时间:2023-11-01 02:50:18 25 4
gpt4 key购买 nike

我有一个简单的方法,可以将命令打印到屏幕上,扫描用户的输入,然后将其作为字符串返回。如果用户的输入无效,它会通知用户并再次询问。此方法运行良好,但我的讲师提到我们应该始终关闭资源,因此我返回并添加了 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;
}
}

异常总是指向 userinput 启动的那一行 scan.nextLine().trim()注意* 我在每个 return 语句之前的每一行上添加了 scan.close() ,但是我没有在上面包含它。

最佳答案

当您关闭 scan 时,您将关闭 System.in,当您尝试重新读取它时,它会抛出异常。

你的导师在一方面是对的,你应该清理资源,只是 不是 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;
}
}

关于java - 调用 Scanner.close() 抛出 nosuchelementexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12454662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com