Heim >Java >javaLernprogramm >Warum schlägt „scanner.nextLine()' nach „scanner.nextInt()' in Java fehl?

Warum schlägt „scanner.nextLine()' nach „scanner.nextInt()' in Java fehl?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 01:36:09829Durchsuche

Why Does `scanner.nextLine()` Fail After `scanner.nextInt()` in Java?

Scanner.nextLine() und seine Auswirkung auf nachfolgende Eingaben verstehen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn