Alternative zu scan.nextLine()

PascalC

Mitglied
Hi,

ich hab das Problem das bei meinem Code oftmals bei einer Nutzereingabe scan.nextLine() übersprungen wird und ich deshalb gezwungen bin, das Feld zweimal in den Code einzufügen.

Gibt es dafür eine elegantere Lösung?

Java:
Spieler typ = new Spieler(null, 0, null, 0);
				
				System.out.println("Wie heißt du?");
				typ.name = scan.nextLine();
				typ.name = scan.nextLine();
				
				System.out.println("Wie alt bist du?");
				typ.alter = scan.nextInt();
				assert typ.alter >= 18 : "Mach dich ab, du Milchbubi!";
				
				System.out.println("Wie ist dein Trinkverhalten");
				typ.trinkverhalten = scan.nextLine();
				typ.trinkverhalten = scan.nextLine();
				
				System.out.println("Das bist du:");
				System.out.println(typ.toString());
 
Zuletzt bearbeitet:
1. OT: warum schließt ihr euch nicht mal alle zusammen, wenn man die letzten Themen so betrachtet haben hier einige das ein und selbe Problem, ich gehe mal davon aus das ihr alle gewisse Studienaufgaben bewältigen sollt?

2.
oftmals wird bei einer Nutzereingabe scan.nextLine() übersprungen
wann ist denn oftmals? Lauf doch mal mit einem Debugger durch deinen Code und beobachte dabei die Variablen.
Wobei bei mir dein Code genau das tut was er scheinbar soll, und das auch mit einem einfachen scan.nextline();

besteht das Problem noch? 🙂


Grüße
Zet
 
Ja, das Problem besteht noch und tritt immer nur bei nextLine, aber nie bei nextInt oder nextDouble auf. Es scheint hauptsächlich aufzutreten, wenn vorher schon eine Nutzereingabe stattgefunden hat. Anscheinend wartet das Programm (Eclipse) nicht bis eine Eingabe stattfindet, sondern verwertet einfach eine Vorhergegangene.

Deshalb meine Frage ob es eine andere Klasse gibt, die dies besser löst. Ich kenne bisher leider nur Scanner.
 
nextLine liest bis zum nächsten Zeilenende.

Da du zur Eingabe der Zahl mit Return bestätigen musst liest nextInt()die Zahl und nextLine() nur bis Zeilenumbruch nach der Zahl - also nichts.
Gib einfach mal
Wie alt bist du?
--> 21 habekeintrinkverhalten ein, dann wird Dir 21 als Alter und sofort habekeintrinkverhalten als trinkverhalten ausgegeben.
next() wartet auf die Eingabe eines Strings.

==
Alter Code:
Java:
        Scanner scan = new Scanner(System.in);
        Spieler typ = new Spieler(null, 0, null, 0);
        System.out.println("Wie heißt du?");
        typ.name = scan.nextLine();
        System.out.println("Wie alt bist du?");
        typ.alter = scan.nextInt();
        assert typ.alter >= 18 : "Mach dich ab, du Milchbubi!";
        System.out.println("Wie ist dein Trinkverhalten");
        typ.trinkverhalten = scan.nextLine();
        System.out.println("Das bist du:");
        System.out.println(typ.toString());



// Console:
Wie heißt du?
Peter Pan
Wie alt bist du?
100 Ich habe kein trinkverhalten, ich werde nie erwachsen.
Wie ist dein Trinkverhalten
Das bist du:
Peter Pan 100  Ich habe kein trinkverhalten, ich werde nie erwachsen. 0

Durch das ersetzen von scan.nextline() durch scan.next() kannst du das Problem lösen, wenn ich das Problem überhaupt richtig verstanden habe. 😳


Edith: btw, assert mag nicht so richtig, oder?
 
Zuletzt bearbeitet:
Ja, super. Das Ersetzen durch next hat geklappt. Vielen Dank für die Hilfe 🙂

Die Assertzuweisung funktioniert, ich musste Sie halt erst in Eclipse umständlich aktivieren. Da dies nicht über den Code geht, wird sie wenn man das Programm kopiert und ausführt nicht greifen 😉
 

Zurück
Oben