User Input
Kurz: Eingaben von der Konsole entgegennehmen — in Java meist über die Klasse Scanner aus java.util.
Genauer: Scanner liest von System.in und bietet typisierte Methoden wie nextInt(), nextDouble() oder nextLine(). Eine häufige Stolperfalle: nach nextInt() direkt nextLine() aufzurufen liefert einen leeren String, weil nextInt() den Zeilenumbruch nach der Zahl nicht mit konsumiert.
Scanner scanner = new Scanner(System.in);
int alter = scanner.nextInt();Im Detail
Scanner scanner = new Scanner(System.in);
System.out.print("Wie heißt du? ");
String name = scanner.nextLine(); // liest eine ganze Zeile
System.out.print("Wie alt bist du? ");
int alter = scanner.nextInt(); // liest nur bis zum nächsten Whitespace/Zeilenumbruch
scanner.nextLine(); // konsumiert den übrig gebliebenen Zeilenumbruch nach nextInt()
System.out.print("Wie heißt deine Stadt? ");
String stadt = scanner.nextLine(); // würde sonst leer sein!
scanner.close(); // Best Practice, meist nicht zwingend nötig bei System.inDie klassische Stolperfalle mit Scanner: Methoden wie nextInt(), nextDouble() oder nextBoolean() lesen NUR den eigentlichen Wert bis zum nächsten Whitespace, lassen aber den abschließenden Zeilenumbruch (Enter-Taste) im Eingabepuffer zurück. Ruft man direkt danach nextLine() auf, liest diese sofort den übrig gebliebenen, leeren Rest der aktuellen Zeile statt der nächsten echten Eingabe — daher braucht es nach einem nextInt()/nextDouble()/etc. meist einen zusätzlichen, “verbrauchenden” nextLine()-Aufruf, bevor man wieder eine ganze Textzeile einlesen will.
Ein zweites häufiges Problem: nextInt() wirft eine InputMismatchException, wenn die Eingabe keine gültige Zahl ist (z. B. Buchstaben statt Ziffern) — ohne Exception-Behandlung stürzt das Programm dann einfach ab. Robuster Code prüft deshalb vorher mit scanner.hasNextInt(), ob überhaupt eine gültige Ganzzahl als Nächstes ansteht, statt blind nextInt() aufzurufen und im Fehlerfall abzustürzen.
Siehe auch: do-while-Schleife, Errors