Bedeutung von xxx.nextline()

vjung

Aktives Mitglied
Java:
import java.util.Scanner;

public class Test {
   public static void main(String[] args) {
     Scanner keyboardReader = new Scanner(System.in);
     int intValue;
     while (true) {
       System.out.print("Zahl eingeben: ");
       intValue = keyboardReader.nextInt();
       System.out.println("Ausgabe: " + intValue);
       keyboardReader.nextLine();
     }
   }
}

Was für eine Bedeutung hat das "keyboardReader.nextLine()"?
Das Programm funktioniert ohne diese Zeile genauso wie mit. außerdem dachte ich xxx.nextLine() ist eine andere Schreibweise für xxx.next() und das verwendet man doch in der form: "String s = xxx.next()" bzw.. "String s = xxx.nextLine()"
 
Zuletzt bearbeitet von einem Moderator:
nextInt liest die nächste Zahl ein und gibt sie zurück, das Problem ist allerdings folgendes:
Die Eingabe wird mit Enter bestätigt, im Puffer des Scanners liegt daher nicht nur die Zahl, sondern auch noch LF (line feed). nextInt liest nun aber nur die Zahl aus dem Puffer, LF wird nicht aus dem Puffer entfernt. nextLine() liest nun alles aus dem Puffer, bis zum LF und entfernt auch dieses.

Wenn du beispielsweise zwei nextInt() direkt hintereinander ausführst, wirst du nur vom ersten einen sinnvollen Wert zurückerhalten, da der zweite sofort zurückkehrt ohne überhaupt etwas neues einzulesen. Daher fügt man nach einem nextInt meist noch ein nextLine ein, nur um den LF aus dem Puffer zu nehmen.
 
Wenn du beispielsweise zwei nextInt() direkt hintereinander ausführst, wirst du nur vom ersten einen sinnvollen Wert zurückerhalten,
Stimmt mMn nicht ganz. Das Problem würde nur dann auftreten wenn du nach einem nextInt() ein nextLine() aufrufst um einen String auszulesen. Dann würde dein nextLine() nur ein LF enthalten.
2 nextInt() hintereinander funktioniert.
 
Die Methoden next() und nextLine() sind quasi wie ein string.split("\\s+") zu betrachten.
Bei next() werden die Zeichen gelesen mit zum nächsten Delimiter (whitespace).
Würdest du also "2 4" eingeben würde folgendes rauskommen:
next(): 2
next(): 4
nextLine(): 2 4

nextLine() liest bis zum Zeilenende (typisch: LF oder CR LF, Unix oder Windows) und schiebt den cursor des Scanners in die nächste Zeile.
 

Neue Themen


Zurück
Oben