Heim >Java >javaLernprogramm >Warum verhält sich „scanner.nextLine()' nach „scanner.nextInt()' in Java anders?

Warum verhält sich „scanner.nextLine()' nach „scanner.nextInt()' in Java anders?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 07:21:09890Durchsuche

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

Scanner.nextLine() für Benutzereingaben verwenden

Frage:

Warum funktioniert das Die Methode scanner.nextLine() verhält sich in den folgenden beiden Java-Codes unterschiedlich Beispiele?

// Working Example
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a sentence: ");
String sentence = scanner.nextLine();
// Not Working Example
while (true) {
    System.out.print("Enter a sentence: ");
    int selection = scanner.nextInt();
    String sentence = scanner.nextLine();
}

Antwort:

Der Unterschied im Verhalten ergibt sich daraus, wie scanner.nextInt() im Vergleich zu scanner.nextLine() Eingaben verbraucht.

Im Arbeitsbeispiel liest scanner.nextLine() eine ganze Eingabezeile, einschließlich Leerzeichen, bis es auf eine neue Zeile trifft Charakter. Im Gegensatz dazu liest scanner.nextInt() nur den ganzzahligen Teil der Eingabe und belässt alle verbleibenden Zeichen im Eingabepuffer.

Wenn der nextInt()-Aufruf ohne nachfolgende Aufrufe von nextLine() verwendet wird, werden alle Zeichen verwendet Im Eingabepuffer verbleibende Zeichen (z. B. ein Zeilenumbruchzeichen) werden nicht verbraucht, was zu Problemen bei nachfolgenden nextLine()-Aufrufen führen kann.

Im nicht funktionierenden Beispiel, nachdem der Benutzer a eingegeben hat Zahl, das verbleibende Zeilenumbruchzeichen wird von nextInt() nicht verbraucht. Folglich liest der nachfolgende Aufruf von nextLine() sofort das Zeilenumbruchzeichen, was dazu führt, dass dem Satz eine leere Zeichenfolge zugewiesen wird.

Um dieses Problem zu beheben, kann nach jedem ein zusätzlicher Aufruf von scanner.nextLine() platziert werden nextInt()-Aufruf, um alle verbleibenden Zeichen im Eingabepuffer zu verbrauchen.

Das obige ist der detaillierte Inhalt vonWarum verhält sich „scanner.nextLine()' nach „scanner.nextInt()' in Java anders?. 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