Daten eingeben

Unser Programm Kaffeetassen kann mittlerweile schon so einiges, allerdings müssen die Tassen immer im Programm stehen. Im Moment kann das Programm noch keine Eingaben von aussen entgegennehmen. Befassen wir uns damit, wie man in JAVA Daten in ein Programm eingeben kann.

Zur Ausgabe von Daten hatte wir schon die Klasse System.out kennen gelernt. Diese Klasse ermöglicht es, Daten auf dem Bildschirm auszugeben. Das Gegenstück zur Eingabe ist System.in. Allerdings kann JAVA mit dieser Klasse alleine noch keine Eingabe entgegen nehmen. Dumm gelaufen, jetzt wird es nichts mehr mit der Eingabe ...

Natürlich war das ein Scherz. JAVA kennt zwar grundsätzlich alles, was zum Programmieren notwendig ist, aber es wäre doch zu mühsam, immer wieder, für jedes Programm neu, die Methoden zu schreiben, damit man Daten mit der Tastatur eingeben kann. Schlaue Leute haben das schon vor uns gemacht und wir profitieren davon, indem wir diese Arbeit, wir bedanken uns ganz herzlich, in unser Programm importieren. Das heißt, wir sagen unserem Programm, wir möchten die Klassen, die von einem anderen Programmierer geschrieben wurden, auch benutzen. Dazu gibt es die Anweisung import. Mit dieser Anweisung können wir schon bestehende Klassen für unser Programm nutzen.

Die import-Anweisung steht in JAVA immer vor der eigentlichen Klasse. Also ganz am Anfang eines Programms. Wenn wir zum Beispiel unser Programm Kaffeetassen mit Tastatureingaben ausstatten wollen, benutzen wir die Klasse java.io.

Ich habe unser Kaffeetassen Programm um einige Anweisungen erweitert. Natürlich um den Import, aber auch um eine Möglichkeit eine neue Tasse einzugeben. Das Programm fragt, ob eine neue Tasse eingegeben werden soll. Bei einer positiven Antwort, kann man die Eigenschaften der Tasse eingeben. Die neue Tasse wird dann mit den schon vorhandenen Tassen ausgegeben.



                 import java.io.*;

                 class Kaffeetassen {

                 /* Programm Kaffeetassen von Heiko Schmuck, im April 2011
                  * Das Programm beschreibt Kaffeetassen und gibt die Beschreibung
                  * auf dem Bildschirm aus.
                  * In der achten Version mit einem Array und einer Zählschleife
                  * und einer switch - case Anweisung.
                  * Es können neue Tassen eingegeben werden.
                  */



                 // Als Platzhalter für unsere Tassen benutzen wir ein Array mit 5 Elementen
                 Tasse Tassen[] = new Tasse[5];

                 // Eine Variable die mit den Eingaben für die neue Tasse gefüllt wird.
                 Tasse neuTasse;

                 // In diese Variablen kommen die Eigenschaften der Tasse.
                 String neuFarbe, neuHenkel, neuAufdruck;
                 int neuHoehe, neuDurchmesser;

                 // Variable für die Antwort
                 String neuEingabe;


                 // Kaffeetassen haben die Eigenschaften: Farbe, Höhe, Durchmesser, Henkel, Aufdruck
                 Kaffeetassen () throws IOException {

                         // Hier wird die Tastatureingabe eingebunden
                         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

                         // Abfragen ob eine neue Tasse eingegeben werden soll
                         System.out.println("Möchten Sie eine neue Tasse eingeben? J oder N eingeben.");
                         neuEingabe = in.readLine();     // Wartet auf eine Eingabe, die Eingabe wird mit Enter abgeschlossen.

                         // Nach der Eingabe prüfen ob ein "J" eingegeben wurde, ansonsten diesen Teil überspringen.
                         if(neuEingabe.equals("J")) {

                                 // Die Eigenschaften der neuen Tassen eingeben
                                 System.out.println("Farbe?");
                                 neuFarbe = in.readLine();
                                 System.out.println("Höhe?");
                                 neuHoehe = new Integer(in.readLine()).intValue();
                                 System.out.println("Durchmesser?");
                                 neuDurchmesser = new Integer(in.readLine()).intValue();
                                 System.out.println("Henkel?");
                                 neuHenkel = in.readLine();
                                 System.out.println("Aufdruck?");
                                 neuAufdruck = in.readLine();

                                 // Neue Tasse anlegen
                                 neuTasse = new Tasse(neuFarbe, neuHoehe, neuDurchmesser, neuHenkel, neuAufdruck);

                                 // Die neue Tasse ausgeben
                                 System.out.println();
                                 System.out.println("Die neue Tasse:");
                                 neuTasse.ausgeben();
                        }

                         Tassen[0] = new Tasse("Weiß", 10, 8, "Ja", "KIKISWEB");
                         Tassen[1] = new Tasse("Schwarz", 10, 8, "Ja", "JAVA");
                         Tassen[2] = new Tasse("Blau", 10, 8, "Ja", "SCHALKE");
                         Tassen[3] = new Tasse("Rot", 10, 8, "Ja", "BAYERN");
                         Tassen[4] = new Tasse("Gelb", 10, 8, "Nein", "BVB");

                 [...]


Das sieht wieder fürchterlich kompliziert aus. Ist es aber gar nicht. Als erstes importieren wir mit import java.io.*;, alles was in dieser Klasse vorhanden ist. Dabei steht .* als Platzhalter für die in der Klasse java.io enthaltenen Objekte, Methoden und Eigenschaften.
Dann erzeugen wir mit Tasse neuTasse; ein neues Objekt vom Typ Tasse. Dann kommen einige Variablen, um die Eigenschaften der Tasse und die Antwort auf unsere Frage nach der neuen Tasse aufzunehmen. Soweit hatten wir schon alles vorher gemacht.
Neu ist Kaffeetassen () throws IOException {. Hier treffen wir das erste mal auf eine Fehlerbehandlung. Durch die Eingabe von Daten könnten Fehler ausgelöst werden, die von unserem Programm nicht abgefangen werden. Wir machen zwar keine Fehler, aber derjenige der das Programm hinterher benutzt, könnte welche machen. Deshalb wird eine sogenannte Exception ausgelöst. Auf deutsch, eine Ausnahme (Fehler) wird erkannt und eine, vorher festgelegte, Fehlerbeschreibung wird ausgegeben. Mit dieser Beschreibung können wir, die Programmierer, auf Fehlersuche gehen. In JAVA ist es festgelegt worden, dass bei "gefährlichen" Dingen eine Ausnahme angegeben werden muss. In unserem Fall, da wir eine Eingabe machen, wird verlangt, dass wir unserer Klasse die IOException mitgeben. Diese Exception müssen wir auch unserer main Methode mitgeben, da diese ja die Klasse Kaffeetassen aufruft.

Danach erzeugen wir mit BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); ein Objekt von Typ BufferedReader. Dieses Objekt stellt einfach nur einen Speicherplatz für unsere Eingaben zur Verfügung. Der Einfachheit halber habe ich diesen Platzhalter in genannt. Mit new BufferedReader(new InputStreamReader(System.in)); wird in erzeugt und darauf vorbereitet die Eingaben von der Tastatur aufzunehmen.

Jetzt können wir endlich Tastatureingaben entgegen nehmen. Auf meine Frage System.out.println("Möchten Sie eine neue Tasse eingeben? J oder N eingeben.");, kann ich nun durch eine Eingabe Antworten. neuEingabe = in.readLine(); wartet darauf, dass über die Tastatur Werte eingegeben werden, bis die Enter-Taste gedrückt wird. Diese Werte werden in die Variable neuEingabe geschrieben. Das war es. Nun ist unsere Eingabe in einer Variablen abgelegt und wir können wie gewohnt damit weiter machen. Um die Methode readLine() nutzen zu können, mussten wir nur vorher das Objekt in erzeugen. Deswegen in.readLine().

Wenn die Frage mit einem "J" beantwortet wurde, und nur bei einem "J", können wir die Eigenschaften der neuen Tasse eingeben. Es folgt jeweils eine Frage und eine Antwort, die in einer Variablen abgelegt wird. Ein Problem dabei ist, dass zwei unserer Variablen den Typ int, Integer, haben. Die Methode in.readLine() kann aber nur den Typ String aufnehmen. Upps !
Was nun? Wir müssen die Eingabe für die Variablen neuHoehe und neuDurchmesser von String in int umwandeln. Dafür gibt es new Integer(in.readLine()).intValue();. Dieser Befehl wandelt die Eingabe von String in den Typ Integer(int) um.

Nun ist alles gut. Alle Eingaben haben den richtigen Typ und werden in Variablen geschrieben. Der nächste Schritt ist, die neue Tasse zu erzeugen. In den vorherigen Versionen des Programms wurden unsere Tassen über Tassen[0] = new Tasse("Weiß", 10, 8, "Ja", "KIKISWEB"); angelegt. Das selbe machen wir mit der neuen Tasse, über neuTasse = new Tasse(neuFarbe, neuHoehe, neuDurchmesser, neuHenkel, neuAufdruck);. Der Unterschied ist, dass wir die Werte nicht direkt eintragen, sondern die Werte in den Variablen benutzen. Jetzt können wir mit der neuen Tasse genauso umgehen, wie mit den schon bestehenden Tassen. neuTasse.ausgeben(); gibt unsere neue Tasse aus.

Das Programm "am Stück" gibt es hier.

Weiter geht es mit der Ausgabe von Daten.

Mit JAVA programmieren

Als Entwicklungsumgebung benutze ich NetBeans 7.