Die in der Klasse java.util.Scanner definierte Methode nextLine() von Java wird häufig dazu verwendet Lesen Sie Textzeilen aus der Standardeingabe (der Tastatur des Benutzers). Allerdings kann seine Verwendung in bestimmten Szenarien zu unerwartetem Verhalten führen.
Betrachten Sie das folgende Beispiel, in dem nextLine() innerhalb einer Menüschleife verwendet wird:
Scanner scanner = new Scanner(System.in); while (true) { // Display menu options // ... System.out.print("Please enter your selection: "); int selection = scanner.nextInt(); if (selection == 1) { // This issue arises here when reading a sentence System.out.print("Enter a sentence: "); String sentence = scanner.nextLine(); } // ... }
Wenn dieser Code ausgeführt wird, schlägt er fehl um den Benutzer zur Eingabe eines Satzes aufzufordern, wenn der Benutzer den Wert 1 eingibt. Stattdessen fährt der Code direkt mit der nächsten Eingabeaufforderung für einen Index fort.
Der Grund für dieses Verhalten liegt darin in der Natur von nextLine(). Bei Verwendung nach nextInt() liest und verbraucht es das verbleibende Zeilenumbruchzeichen (n) im Eingabestream. Wenn nextLine() aufgerufen wird, um den Satz zu lesen, stößt es folglich auf einen leeren Eingabepuffer und gibt eine leere Zeichenfolge zurück.
Um dieses Problem zu beheben, ist es notwendig, das Zeilenumbruchzeichen explizit mit scanner.nextLine( zu konsumieren ) nach jedem scanner.nextInt(). Dadurch wird sichergestellt, dass der Eingabepuffer geleert wird und nextLine() die Benutzereingaben für den Satz korrekt lesen kann.
Durch Befolgen dieser Richtlinie können Sie Inkonsistenzen bei der Verwendung von nextLine() vermeiden und sicherstellen, dass Ihr Code den Benutzer korrekt verarbeitet Eingabe sowohl in Single-Pass- als auch in Multi-Pass-Szenarien.
Das obige ist der detaillierte Inhalt vonWarum schlägt „scanner.nextLine()' nach „scanner.nextInt()' in Java fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!