Durch Aufrufen von Scanner.close () wird die Ausnahme nosuchelement ausgelöst

Ich habe eine einfache Methode, die einen Befehl auf dem Bildschirm ausgibt, die Eingabe eines Benutzers scannt und als String zurückgibt. Wenn die Eingabe des Benutzers ungültig ist, wird der Benutzer benachrichtigt und erneut gefragt. Diese Methode hat einwandfrei funktioniert, aber mein Kursleiter hat erwähnt, dass wir Ressourcen immer schließen sollten. Deshalb habe ich zurückgegangen und die Methode close hinzugefügt, und jetzt erhalte ich bei jedem Aufruf der Methode eine NoSuchElementException, unabhängig von der Benutzereingabe. Hier ist der Code ...

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;
    }
}

Die Ausnahmen verweisen immer zurück auf die Zeile, in der die Benutzereingabe als scan.nextLine () eingeleitet wird. Trim () HINWEIS * Ich habe scan.close () in jeder Zeile vor jeder return-Anweisung hinzugefügt, habe sie jedoch nicht oben angegeben.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage