nextLine()-Verständnis
In der java.util.Scanner-API von Java gibt die Methode nextLine() Entwicklern die Möglichkeit, Zeichenfolgeneingaben zu analysieren vom Benutzer. Es kann sich jedoch anders verhalten, wenn es innerhalb von Schleifen oder nach anderen Eingabeanalysemethoden wie nextInt() verwendet wird.
Szenario Nr. 1:
Ein Codeausschnitt, der nextLine( ) erfolgreich:
Scanner scanner = new Scanner(System.in); // Wait for user input before continuing String sentence = scanner.nextLine(); // Continue with more input int index = scanner.nextInt();
In diesem Szenario wartet nextLine() auf Benutzereingaben, bevor es fortfährt nextInt().
Szenario Nr. 2:
Betrachten Sie nun einen Codeausschnitt, der sich unerwartet verhält:
Scanner scanner = new Scanner(System.in); // Infinite loop while (true) { // Menu options int selection = scanner.nextInt(); // Input only works after reading the number if (selection == 1) { String sentence = scanner.nextLine(); int index = scanner.nextInt(); } }
Hier funktioniert nextLine() Warten Sie nach nextInt() nicht auf Benutzereingaben. Es springt zur nächsten Zeile und macht die Eingabe eines Satzes unmöglich.
Erklärung:
Der Unterschied zwischen diesen Beispielen liegt in der nextInt()-Methode. Es liest numerische Eingaben, verbraucht jedoch nicht das folgende Zeilenumbruchzeichen (n). Wenn nextLine() nach nextInt() aufgerufen wird, versucht es daher, das bereits verbrauchte Zeilenumbruchzeichen zu lesen, was zu dem unerwarteten Verhalten in Szenario Nr. 2 führt.
Lösung:
Um dieses Problem zu beheben, fügen Sie nach jedem nextInt() einen zusätzlichen nextLine()-Aufruf ein, um die verbleibende Eingabe in der Zeile zu verbrauchen, bevor Sie mit der nächsten Eingabeanforderung fortfahren. Dadurch wird sichergestellt, dass nextLine() immer auf Benutzereingaben wartet.
Das obige ist der detaillierte Inhalt vonWarum verhält sich Javas „nextLine()' nach „nextInt()' unerwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!