Ich habe zwei Versionen von Java-Code, die Benutzereingabe, bis Benutzertypen "q" Version 1 bekommt:Java unter Verwendung von Scanner mit Try-mit-Ressourcen
public class Test {
public static void main(String[] args) {
String input = "";
while (!input.equals("q")) {
Scanner scanner = new Scanner(System.in);
System.out.print("Input: ");
input = scanner.nextLine();
System.out.println("Input was: " + input);
}
}
}
Version 2:
public class Test {
public static void main(String[] args) {
String input = "";
while (!input.equals("q")) {
try(Scanner scanner = new Scanner(System.in)){
System.out.print("Input: ");
input = scanner.nextLine();
System.out.println("Input was: " + input);
}
}
}
}
Version 1 funktioniert wie erwartet, aber Version 2 funktioniert nicht wie erwartet. Das ist nach Benutzereingabe zum ersten Mal zu lesen, einen Fehler
Input: 12
Input was: 12Exception in thread "main"
Input: java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at RealEstateCompany.main(RealEstateCompany.java:115)
Meine Vermutung ist, seit der Version 2 verwendet versuchen, mit Ressource erzeugt, so dass es den Scanner nach dem Gebrauch schließt wurde und dass ein Fehler verursacht?
Vielen Dank für Ihre Hilfe im Voraus!
[Update] Version 3:
public class Test {
public static void main(String[] args) {
String input = "";
try(Scanner scanner = new Scanner(System.in)){
while (!input.equals("q")) {
System.out.print("Input: ");
input = scanner.nextLine();
System.out.println("Input was: " + input);
}
}
}
}
Version 3 funktioniert. Warum ist Version 3 jedoch in Ordnung und Version 2 ist nicht in Ordnung?
'try-with' schließt automatisch den zugrundeliegenden' Scanner', der automatisch den zugrunde liegenden Stream schließt, der 'System.in' ist. Danach können Sie keine Benutzereingaben mehr erhalten. – QBrute
Haben Sie versucht, versuchen (Scanner Scanner = neue Scanner (System.in)) außerhalb der While-Schleife? –
@RajuSharma Vielen Dank für Ihren Rat. Ja, es hat mein Problem gelöst, aber warum löst das das Problem? – ksn