Hier wurde künstlich einer der wenigen Anwendungsfälle konstruiert, bei dem die Verwendung von BR weniger vorteilhaft dargestellt werden soll. Aber gut, jeder wie er will.
Nein,
beim Benutzen des BufferedReader und von Integer.parseInt() und beim Zugriff auf ein Array muss ich die Exceptions abfangen oder vorher prüfen (
if(tokens.length < 2)
, dass keine Exceptions (ArrayIndexOutOfBoundsException) auftreten können.
Das sieht erst einmal mühsam aus.
Beim Scanner kann ich mir dies sparen - habe aber zunächst keine Kontrolle bei falschen Eingaben. Ich hatte ja ausdrücklich geschrieben:
void testScanner() {
// Hier werden falsche Eingaben nicht abgefangen!
// Wenn man das noch machen will, wird es auch hier mühselig.
Ich habe auch keine Ahnung, wie man mit dem Scanner Falscheingaben abfängt (natürlich gibt es
hasNextInt()
, aber was tue ich, wenn dies "false" zurückliefert.).
Ich denke, dass es folgendes Dilemma gibt:
- In jeder Anwendung erwartet es der User, dass er eine graphische Oberfläche hat; Eingaben auf einem schwarzen Bildschirm sind wohl nicht mehr zeitgemäß (es sei denn, ich schreibe ein schnelles Programm für mich oder einen anderen IT-Spezi).
- Wir raten immer allen Anfängern davon ab, zu früh mit der Oberflächenprogrammierung zu beginnen - sie sollen erst einmal anständig Java lernen.
In der Situation eines Java-Anfängers, der beispielsweise alle Primzahlen bis zu einer einzugebenden Zahl n berechnen soll, ist es am einfachsten, diese Zahl n mit dem Scanner einzulesen.
Für andere Anwendungen, die insbesondere nicht von System.in sondern aus einem anderen Input-Stream lesen, würde ich auch den BufferedReader empfehlen.
Gruß
FHoffmann
Edit: Mich hat es nur gewundert, dass in der ursprünglichen Frage die Benutzung des Scanners als "nicht einfach" dargestellt wurde, und dass dann als "einfachere" Lösung die Benutzung von BufferedReader vorgeschlagen wurde.