Scanner - Leerzeile



  • Hi,

    Ich hab ein Problem: Ich lese mit dem Scanner erst eine double-Zahl ein, danach eine Zeile Zeichenkette. Die double-Zahl kann problemlos eingelesen werden, wenn ich danach jedoch eine Zeichenkette mit nextLine() einlesen will, so wird der Benutzer nicht zur Eingabe aufgefordert. Ich vermute mal, dass die Leerzeile nach der Dezimalzahl nicht gelöscht wurde. Kann mir da jemand weiterhelfen?

    lg



  • Guten Morgen.

    Ich könnte hier nun einen langen Vortrag über die Frage halten, weshalb das nicht funktioniert, die diffusen Gründe weshalb der Scanner in Java kaputt ist und nicht repariert wird.

    Stattdessen rate ich dir zu folgendem: Mische nicht nextLine() mit anderen Input-Methoden wie nextInt() oder nextDouble(). Benutze mehrere Scanner hierfür. Selbst wenn du es zum laufen bringst, funktioniert es in der Regel nicht auf anderen JVMs.

    Java. Compile once, run nowhere 😉



  • /rant/ schrieb:

    Ich könnte hier nun einen langen Vortrag über die Frage halten, weshalb das nicht funktioniert, die diffusen Gründe weshalb der Scanner in Java kaputt ist und nicht repariert wird.

    Stattdessen rate ich dir zu folgendem: Mische nicht nextLine() mit anderen Input-Methoden wie nextInt() oder nextDouble(). Benutze mehrere Scanner hierfür. Selbst wenn du es zum laufen bringst, funktioniert es in der Regel nicht auf anderen JVMs.

    Bist du dämlich oder so? Der Scanner ist völlig in Ordnung. nextInt() liest eine Zahl aus dem Stream. Wenn nach der Zahl noch ein Zeilenumbruch kommt, wird der natürlich nicht mitgelesen, weil ein Zeilenumbruch keine Zahl ist. Welches Verhalten hast du denn bitte erwartet?

    Mehrere Scanner zu benutzen ist übrigens der dümmste Rat den man geben kann. Mit mehreren Streams aus der selben Datenquelle zu lesen funktioniert nie, egal in welcher Sprache und auf welchem System.



  • Na was ist denn dann die Lösung, um die Leerzeile zu entfernen?



  • Einfach mit scanner.nextLine() alles was hinter dem double kommt inklusive Zeilenumbruch überlesen. Das nächste nextLine() startet dann am Anfang der nächsten Zeile.


Anmelden zum Antworten