1. Lesen von der Konsole, System.in
In den vorherigen Vorlesungen haben wir die Ausgabe auf den Bildschirm kennengelernt. Dazu haben wir das Objekt System.out und seine Methoden print() und println() verwendet. Einfach und bequem.
Aber wie Sie sich wahrscheinlich schon denken, reicht die reine Ausgabe nicht aus. Das Ziel der meisten Programme – etwas Nützliches für den Benutzer zu tun. Daher ist es sehr oft nötig, dass der Benutzer Daten über die Tastatur eingeben kann.
Wie für die Ausgabe gibt es auch für die Eingabe ein spezielles Objekt – System.in. Es ist für uns jedoch leider nicht so bequem, wie wir es gern hätten. Dieses Objekt erlaubt das Einlesen von der Tastatur, aber nur jeweils ein Zeichen.
Deshalb verwenden wir eine weitere Klasse, die zusammen mit dem Objekt System.in alles bereitstellt, was wir brauchen. In Java gibt es schon lange Klassen für alle Lebenslagen. Eine davon lernen wir jetzt kennen.
2. Die Klasse Scanner
Die Klasse Scanner (vollständiger Name java.util.Scanner) kann Daten aus verschiedenen Quellen einlesen: Konsole, Dateien, Internet. Wenn wir möchten, dass sie Daten von der Tastatur liest, müssen wir ihr das Objekt System.in als Parameter – also als Datenquelle – übergeben. Das Objekt vom Typ Scanner kümmert sich dann selbst darum, was zu tun ist.
Das Einlesen von der Tastatur mit einem Objekt vom Typ Scanner sieht ungefähr so aus:
| Code | Erläuterung |
|---|---|
|
Wir erstellen ein Objekt der Klasse Scanner. Wir lesen eine Textzeile von der Tastatur. Wir lesen eine Zahl von der Tastatur. |
Sieht nicht kompliziert aus – aber ist wirklich alles so einfach?
Ich denke, es sind eine Menge Fragen aufgekommen, und die beantworten wir jetzt.
Doch zunächst zeigen wir ein vollständiges Programmbeispiel, in dem die Klasse Scanner verwendet wird:
void main()
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
3. Erzeugen eines Scanner-Objekts
Die erste Frage – was hat es mit der Zeile Scanner console = new Scanner(System.in); auf sich?
Eine solche Zeile kann verwirrend sein, allerdings werden Ihnen ähnliche Konstruktionen ständig begegnen. Es ist also an der Zeit zu erklären, was hier steht.
Erinnern wir uns daran, wie wir normalerweise eine Variable mit Text erstellen:
String str = "Text";
Zuerst schreiben wir den Typ der Variablen (String), dann ihren Namen (str) und schließlich nach dem Gleichheitszeichen den Wert.
In unserer „merkwürdigen“ Zeile ist es im Grunde genau dasselbe:
Scanner console = new Scanner(System.in);
Alles, was sich links vom Gleichheitszeichen befindet, ist die Deklaration einer Variablen vom Typ Scanner mit dem Namen console. Man hätte sie auch zum Beispiel s, scanner oder sogar keyboard nennen können. Dann sähe der Code so aus:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Ich denke, jetzt ist alles viel klarer.
Der Code, der sich rechts vom Gleichheitszeichen befindet, ist etwas komplexer. Ich meine new Scanner(System.in); Aber auch das ist nichts Abgehobenes.
Mit diesem Code sagen wir der Java-Maschine: Erzeuge ein neues Objekt (das Wort new) vom Typ Scanner und übergib ihm als Parameter die Quelle, aus der das neu erstellte Objekt Scanner seine Daten beziehen soll – das Objekt System.in.
Nach der Ausführung dieser gesamten Zeile haben wir eine Variable namens console vom Typ Scanner, mit deren Hilfe unser Programm Daten von der Tastatur einlesen kann.
4. Methodenaufrufe
Im obigen Beispiel hielt unsere Variable console vom Typ Scanner intern eine Referenz auf ein Objekt vom Typ Scanner.
Um die Methoden des Objekts aufzurufen, auf das die Variable verweist, schreibt man nach dem Variablennamen einen Punkt, dann den Methodennamen und die Parameter. Allgemein sieht dieser Befehl so aus:
variable.method(parameters);
Beispiele:
System.out.println("Hallo");
System.out.println(1);
Wenn Sie der Funktion keine Parameter übergeben möchten, schreiben Sie einfach leere Klammern:
variable.method();
Beispiel:
System.out.println();
5. Dateneingabe von der Konsole
Daten über die Tastatur einzugeben ist sehr einfach, wenn wir ein Objekt vom Typ Scanner haben.
Um eine Zeile von der Tastatur einzulesen, benötigen wir folgenden Befehl:
String str = console.nextLine();
Wenn das Programm zu dieser Zeile gelangt, hält es an und wartet, bis der Benutzer Daten eingibt und die Taste Enter drückt. Danach wird alles, was der Benutzer eingegeben hat, in der Variablen str gespeichert.
Um eine Zahl von der Tastatur einzulesen, benötigen wir folgenden Befehl:
int number = console.nextInt();
Hier gilt dasselbe wie beim vorherigen Befehl. Wenn das Programm diese Zeile erreicht, hält es an und wartet, bis der Benutzer Daten eingibt und Enter drückt. Danach werden die eingegebenen Daten in eine Zahl umgewandelt und in der Variablen number gespeichert.
Wenn der Benutzer Daten eingibt, die sich nicht in eine ganze Zahl umwandeln lassen, tritt im Programm ein Fehler auf und es wird beendet.
Um eine Gleitkommazahl von der Tastatur einzulesen, benötigen wir folgenden Befehl:
double number = console.nextDouble();
Dieser Befehl entspricht vollständig der Methode nextInt(), nur prüft er, ob die eingegebenen Daten in eine Zahl vom Typ double umgewandelt werden können.
Beispiel für ein Programm, das zwei Zahlen von der Tastatur einliest und deren Summe ausgibt:
void main()
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
Hinweis
Der Benutzer kann mehrere Zahlen in einer Zeile eingeben und sie durch Leerzeichen trennen: Eine solche Situation wird von den Methoden der Klasse Scanner korrekt verarbeitet. Die Zahlen werden vom Programm jedoch erst eingelesen, nachdem der Benutzer Enter gedrückt hat.
GO TO FULL VERSION