Heim > Java > javaLernprogramm > Warum verhält sich Javas „nextLine()' nach „nextInt()' unerwartet?

Warum verhält sich Javas „nextLine()' nach „nextInt()' unerwartet?

Barbara Streisand
Freigeben: 2024-12-21 11:37:17
Original
692 Leute haben es durchsucht

Why Does Java's `nextLine()` Behave Unexpectedly After `nextInt()`?

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();
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage