コマンドを画面に出力し、ユーザーの入力をスキャンして、文字列として返す簡単なメソッドがあります。ユーザーの入力が無効な場合は、ユーザーに通知して再度尋ねます。このメソッドは完全に機能しましたが、インストラクターは常にリソースを閉じる必要があると述べたので、戻って 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() を追加しましたが、上記には含めませんでした。