Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 12. Vorlesung WS 2001/2002.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 12. Vorlesung WS 2001/2002."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 12. Vorlesung WS 2001/2002

2 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/022 Übersicht Besprechung der Übungsaufgabe Ein- und Ausgabe in Java –Datenströme –Quellen, Senken und Filter –Zeichen und Rohdaten –Java-Klassen für Ein- und Ausgabe

3 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/023 Übungsaufgabe vom Schreiben Sie ein Programm, das ein Integer-Array mit 500 Elementen erzeugt. Füllen Sie das Array mit Zufallszahlen, die im Bereich von 0 bis 99 liegen sollen. Anschliessend soll eine Schleife mal 1.Eine Integer-Zufallszahl von 0 bis 510 erzeugen, 2. welche als Index in das Array verwendet wird und den an der entsprechenden Stelle befindlichen Wert x=a[zufallsindex] ausliest. 3. Dieser Wert x soll als Divisor für eine beliebige Division verwendet werden, z.B.: b = 10 / x Welche Fehler treten bei der Programmausführung auf? Ergänzen Sie das Programm um eine differenzierte Fehlerbehandlung, so dass es nicht mehr abbricht.

4 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/024 Lösung Welche Fehler treten bei der Programmausführung auf? ArrayIndexOutOfBoundsException weil die Zufallsvariable, die auf das Array-Element verweist, auch die Werte 500 bis 510 annehmen kann. Die Array-Grenze reicht aber nur bis 499. ArithmeticException: / by zero weil der aus dem Array gelesene Divisor auch den Wert 0 besitzen kann. Ergänzen Sie das Programm um eine differenzierte Fehlerbehandlung, so dass es nicht mehr abbricht. Lösung: die zweite Schleife in einen try-catch-Block einschließen mit zwei catch-Anweisungen für die beiden Exception-Klassen

5 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/025 Ein- und Ausgabe in Java Alle Ein- und Ausgabefunktionen von Java sind Datenstrom-basiert (Stream-basiert). Die beteiligten Komponenten sind: –Quelle (oder auch Produzent) Beispiele: Datei, Internet-Verbindung, Prozess, Tastatur, Sensoren,... –Senke (oder auch Ziel, Konsument) Beispiele: Datei, Internet-Verbindung, Drucker, Bildschirm, Prozess,... Bei Quellen und Senken wird zwischen externen und internen Datenströmen unterschieden. –extern: Daten verlassen bzw. kommen von außen in die Java-Umgebung –intern: Daten fließen zwischen Prozessen und/oder Methoden

6 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/026 Ein- und Ausgabedatenströme Aus der Sicht eines Prozesses bzw. Programmabschnitts (z.B. einer Methode) sind Datenströme entweder –Eingabedatenströme oder –Ausgabedatenströme Der Ausgabestrom eines Prozesses bzw. einer Methode kann der Eingabestrom für einen anderen Prozess sein –Die Verbindung zwischen den beiden Prozessen / Methoden wird dabei auch als Kanal bezeichnet Mehrere Verbindungen möglich: –mehrere Prozesse können ihre Ausgabedatenströme in denselben Eingabestrom eines anderen Prozesses einspeisen –Mehrere Prozesse können sich mit ihrem Eingabestrom an denselben Ausgabestrom eines anderen Prozesses anhängen

7 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/027 Filter, Eigenschaften von Datenströmen Es gibt spezielle Ein-/Ausgabekomponenten, die genau einen Ein- und Ausgabekanal besitzen; diese werden auch als Filter bezeichnet –Aufgaben: Filterung, Transformation, Konvertierung der durchgereichten Daten –Beispiele: Verschlüsselung, (De-)Kompression, Zeichensatzanpassung Datenströme können –endlich (z.B. eine Datei, oder WWW-Seite) oder –unendlich (z.B. Mausbewegungen, Sensormessungen) sein.

8 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/028 Unterscheidung von Rohdaten und Text Bei der Art der ein- und auszugebenden Daten wird kategorisch unterschieden zwischen –Rohdaten (Bytes) –Zeichen (Text) Hintergrund: 1. Früher reichte ein Byte um ein Zeichen zu speichern (das amerikanische Standardzeichenformat ASCII benötigte sogar nur 7 Bit) Zur Unterstützung der Mehrsprachigkeit wurde ein neuer Standard geschaffen, der sog. Uni-Code mit 16 Bit pro Zeichen Java unterstützt sowohl die bisherigen Codierungen als auch Uni-Code. 2.Einige Ein- und Ausgabefunktionen sind für verschiedene Betriebs- systeme unterschiedlich. Beispiel: Der Zeilenumbruch wird unter Windows anders realisiert als unter Linux oder MacOS

9 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/029 Java-Basisklassen für Ein- und Ausgabe InputStream :stellt Methoden zum Einlesen/ Öffnen von Byte- Streams (Rohdaten) zur Verfügung OutputStream :stellt Methoden zum Öffnen/ Ausgabe von Byte- Streams (Rohdaten) zur Verfügung Reader :stellt Methoden analog zum InputStream für Textdateien zur Verfügung Writer :analog zum OutputStream allerdings für Text alle 4 Klassen sind abstrakte Klassen

10 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0210 Klassen zum Einlesen von Rohdaten (Bytes) Datei (Lesen) zur Interprozess- kommunikation aus Strings lesen gepufferte Eingabe Lesen komprimierter Daten Einlesen von Java Datentypen Die gleiche Klassenhierarchie existiert auch für OutputStreams

11 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0211 Klassen zur Ausgabe von Text gepufferte Ausgabe Textausgabe via Outputstreams Basisklasse für Konstruktion von Ausgabe- filtern Textausgabe in Datei Die gleiche Klassenhierarchie existiert auch für Reader Textuelle Ausgabe der Java-Basistypen

12 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0212 Schnittstelle zwischen Text und Rohdaten Jeder Text wird letztlich auf eine Folge von Bytes abgebildet, wenn er übertragen oder in eine Datei geschrieben werden soll. –gleiches gilt für externe Datenquellen Konvertierung von Text- in Rohdaten notwendig (und umgekehrt) Klasse InputStreamReader: Abstrakte Basisklasse für alle Reader, die einen Byte-Strom in einen Zeichenstrom umwandeln. –Unterklasse: z.B. FileReader zum Einlesen von Text aus Dateien Klasse OutputStreamWriter: Abstrakte Basisklasse für alle Writer, die einen Zeichenstrom in einen Byte-Strom umwandeln. –Unterklasse z.B. FileWriter für Textausgaben in eine Datei

13 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0213 Arbeiten mit Datenströmen 1.Datenstrom öffnen –z.B. durch Erzeugen eines FileWriter- oder FileReader-Objekts, wobei der Dateiname dem Konstruktor übergeben wird Beispiel: FileWriter datei = new FileWriter(“C:\\Temp\\test.txt“); Um in einem String einen Backslash \ einzugeben, müssen zwei \\ hintereinander angeben werden. 2.Daten schreiben bzw. lesen –die konkreten Methoden hängen von der verwendeten Ein-/ Ausgabeklasse ab (siehe Java-Dokumentation) Beispiel: datei.write(“Hallo Welt!“); 3.Datenstrom schließen –Spätestens am Ende des Programms muss der Datenstrom geschlossen werden Beispiel: datei.close();

14 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0214 Ausnahmebehandlung bei Ein-/Ausgaben Bei fast allen Ein- und Ausgabeoperationen können Fehler auftreten. –z.B.: Datei voll, Datei nicht vorhanden, keine Zugriffsberechtigung,... Zur Fehleranzeige lösen die Ein- und Ausgabemethoden von Java entsprechende Exceptions aus –Die Ein- und Ausgabemethoden sind so definiert, dass ein Aufrufer sich um das Auftreten möglicher Exceptions explizit kümmern muss –Aufrufe von Ein- und Ausgabemethoden müssen deshalb in einen try- catch-Block eingebettet werden –Eingabe-/Ausgabe-Exceptions sind Unterklassen von der Klasse IOException

15 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0215 Standardein- und ausgabeströme (I) Grundsätzlich besitzt jedes Java-Programm drei vordefinierte Ein- und Ausgabedatenströme: –Standardeingabe –Standardausgabe –Standardfehlerausgabe Diese Ströme werden von der Laufzeitumgebung des Java- Programms beim Programmstart eingerichtet und geöffnet. –Für die Standardeingabe wird ein Objekt der Klasse InputStream erzeugt und der Klassenvariable System.in der Klasse System zugewiesen –Für die Standardausgabe und die Standardfehlerausgabe werden je ein Objekt der Klasse PrintStream erzeugt und den Klassenvariablen System.out bzw. System.err der Klasse System zugewiesen

16 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0216 Standardein- und ausgabeströme (II) In der Entwicklungsumgebung Forté wird –der Standardausgabe- sowie der Standardfehlerausgabestrom auf das Ausgabefenster gelenkt –der Standardeingabestrom durch das Eingabefeld „Program Input:“ am unteren Rand des Ausgabefensters bedient Eigenständig laufende Java-Programme (außerhalb einer Entwicklungsumgebung) lenken die Standardströme oftmals in das Fenster (z.B. MSDOS-Eingabeaufforderung oder Linux Shell-Fenster), in dem das Programm gestartet wurde Per Voreinstellung sind die Standardein- und Ausgabedatenströme also unendlich, sie können aber auch auf einen Dateilese- oder –schreibdatenstrom umgelenkt werden.

17 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/0217 Übungsaufgabe Mini-Taschenrechner Schreiben Sie ein Programm, das eine Zeile von der Standardeingabe einliest (String) Diese Zeile soll eine Grundrechenoperation auf ganzen Zahlen ausdrücken. Beispiel für erlaubte Eingaben: /9 2* Das Programm soll den Ausdruck auswerten und das Ergebnis ausgeben


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 12. Vorlesung WS 2001/2002."

Ähnliche Präsentationen


Google-Anzeigen