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. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit Java 12. Vorlesung WS 04/05

2 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Übersicht Fehlerbehandlung Schreiben in Dateien Lesen aus (Text-)Dateien –zeilenweise –Lesen von Token ("Parsen")

3 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Laufzeitfehler in Java Viele Fehler werden vom Compiler aufgedeckt (z.B. fehlendes Semikolon, nicht deklarierte Variable) Andere Art von Fehler: Laufzeitfehler –tritt während der Ausführung des Programms auf –unterbricht den normalen Fluss der Befehle (Programm stützt ab) –Name dieser Fehler: Ausnahme (engl. Exception) Beispiele für Ausnahmesituationen: –bei Berechnungen Division durch Null –Mangel an Speicherplatz –Zugriff auf Array-Elemente über die Obergrenze hinaus –Schreib-/Lesefehler bei Ein- und Ausgabeoperationen Diskette defekt Netzwerkverbindung zusammengebrochen Festplatte voll zu öffnende Datei nicht vorhanden usw.

4 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Fehler während des Ablaufs - Beispiel - public class Polygon { private Punkt[] eckpunkt; public Polygon(){ super(); } public void leeres_Polygon( int anzahl_eckpunkte){ eckpunkt = new Punkt[ anzahl_eckpunkte]; } public void punkt_einfuegen( int position, Punkt punkt){ eckpunkt[ position] = punkt; } mögliche Fehler negative Anzahl Position außerhalb des Arrays Array noch nicht angelegt

5 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Laufzeitfehler: Beispiel................................ int[ ] a; a = new int[2]; a[0] = 5; a[1] = 6; a[2] = 6; //Fehler

6 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Abfangen des Fehlers: try-catch................................ try{ int[ ] a; a = new int[2]; a[0] = 5; a[1] = 6; a[2] = 6; } catch(java.lang.Exception e){ System.out.println("Fehler: Arraygrenze überschritten"); } Anweisungen, bei denen ein Fehler auftreten kann. Anweisungen, die ausgeführt werden, sobald ein Fehler aufgetreten ist hier geht es in jedem Fall weiter

7 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Ausnahmebehandlung in Java Vorteile der Java-Ausnahmebehandlung –Programm stürzt nicht ab –Programm macht an genau definierter Stelle weiter –systematische und übersichtliche Trennung von normalem und fehlerbehandelndem Code Im Falle einer Ausnahme wird ein sog. Exception-Objekt erzeugt und weitergeleitet –Instanz der Klasse Exception oder von Unterklasse –Exception-Objekt erhält Information über Ausnahme –Exception-Objekt wird mit catch gefangen (Fehlerbehandlung)

8 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Exceptions: Klassen-Hierarchie Throwable (from lang) Exception (from lang) ArrayIndexOutOfBoundsException (from lang) ArithmeticException (from lang) IOException (from io) FileNotFoundException (from io)

9 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Exception-Klassen I/II Exception Der universelle Vater aller Fehlermeldungen. Von dieser Klasse sind alle anderen abgeleitet. NullPointerException ( extends Exception) Tritt auf, wenn ein Objekt benutzt werden soll, obwohl es noch nicht angelegt wurde. Student student; student.drucke_ausweis(); Beispiel :

10 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Exception-Klassen II/II ArrayIndexOutOfBoundsException ( extends Exception) Tritt auf, wenn auf ein Arrayelement zugegriffen wird, das nicht existiert. Student student = new Student[2] Student student[3] = new Student(“Dirk“,“Dörschlag“); Beispiel : ClassCastException ( extends Exception) Tritt auf, wenn ein Objekt mittels expliziter Typenkonvertierung in eine Typ umgewandelt wird, welcher nicht zu seinen Ahnen gehört Student student = new Student(“Dirk“,“Dörschlag“); Dozent dozent = (Dozent) student; Beispiel :

11 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Differenzierte Fehlerbehandlung in try-Block können verschiedene Arten von Fehlern auftreten –differenzierte Behandlung sinnvoll Lösung: –mehrere catch-Anweisungen, eine für jeden Fehlertyp –Unterscheidung anhand des Namens des Fehlers (der Exception)

12 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Fang den Fehler und handle - Differenzierung nach Fehlertyp - try{ anweisung(en); } catch( Fehlertyp_1 f1){ anweisung(en); } catch( Fehlertyp_2 f2){ anweisung(en); } Syntax : Anweisungen, bei denen ein Fehler auftreten kann. Anweisungen, die ausgeführt werden, sobald ein Fehlertyp_2 aufgetreten ist Anweisungen, die ausgeführt werden, sobald ein Fehlertyp_1 aufgetreten ist

13 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 public class Polygon { public void punkt_einfuegen( int position, Punkt punkt){ try{ eckpunkt[ position] = punkt; } catch( NullPointerException npe){ System.out.println(“Polygon.punkt_einfuegen()“+ “::Eckpunkte nicht angelegt!“); } catch( Exception e){ System.out.println(“Polygon.punkt_einfuegen()“+ “::Ein Fehler wurde erkannt!“); } Fang den Fehler und handle - try{ anweisung } catch ( fehler ) { warnung } -

14 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Mehrere Catch-Klauseln die in der Reihenfolge erste catch-Klausel, die passt, wird verwendet –dann ist try-catch beendet Beispiel: try{ eckpunkt[ position] = punkt; } catch( Exception e){.....} catch( NullPointerException npe){....}; //Zweite catch-Klausel wird nie erreicht Daher: Zuerst die speziellere, dann die allgemeinere Exception

15 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Weiterleiten von Exceptions Bisher: Fehler in try{...} wurde in catch(..){...} abgefangen und behandelt Alternative: Weiterleiten des Fehlers in einer Methode m nach oben an die Methode, die m aufruft –dort muss Fehler mit try-catch behandelt werden oder wiederum an die aufrufende Methode weitergeleitet werden –die Methode m muss dies durch throws-Klausel kenntlich machen. Beispiel: public void leeres_Polygon( int anzahl_eckpunkte) throws Exception{ eckpunkt = new Punkt[ anzahl_eckpunkte]; }

16 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Fehlermeldungen weiterleiten - Syntax - modifier class Klassenname {... modifier rueckgabetyp methodenname( parameter) throws Fehlertyp_1(, Fehlertyp_2,...) { anweisung(en); }... } Syntax : die Methode wird an der Stelle abgebrochen, an der der Fehler auftritt !

17 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Fehlermeldungen weiterleiten - Beispiel - public class Polygon { private Punkt[] eckpunkt;... public void leeres_Polygon( int anzahl_eckpunkte) throws Exception{ eckpunkt = new Punkt[ anzahl_eckpunkte]; }... }

18 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Übung im GIS-Labor Macht das folgende Programm mittels try {...} catch (Exception e) {...} absturzsicher und gebt bei einem Fehler eine Fehlermeldung aus (Tip: nutzt die Methode printStackTrace() von Exception) class Ereignis1 { public static void main (String args[]) { int a; int b = 0; a = 10/b; System.out.println("Programmende wurde erreicht!"); }

19 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Schreiben in/Lesen aus Text-Dateien Mein Programm Messwerte Ergebnisse PNRXYZ

20 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Schreiben in Datei: Beispiel I import java.io.*;........ try{ FileWriter fr = new FileWriter("d:\\tmp\\log.txt"); fr.write("Dieser Text steht in der ersten Zeile der "); fr.write("Datei log.txt.\n"); fr.write("Und dieser in der zweiten."); fr.close(); } catch(Exception e){}

21 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Schreiben in Datei Öffnen der Datei: Erzeugen einer Instanz der Klasse "FileWriter" –Dateiname als Parameter des Konstruktors Scheiben: Aufruf der Methode write(...) für Instanz von FileWriter (Analog zu System.out.println) wenn fertig mit schreiben: Aufruf der Methode close() für Instanz von FileWriter alles muss in try{..} stehen (da fehleranfällig) Package "java.io" muss importiert werden

22 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Schreiben in Datei: Beispiel II import java.io.*;........ try{ //der folgende Konstruktor ermöglicht das Anfügen von // Text am Ende der Datei (falls diese vorhanden ist) FileWriter fr = new FileWriter("d:\\tmp\\log.txt",true); fr.write("...."); fr.close(); } catch(Exception e){}

23 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Gepuffertes Schreiben Datei zum schreiben öffnen: BufferedWriter bw = new BufferedWriter (new FileWriter(“Dateiname“)); FileWriter ermöglicht das Schreiben von Dateiinhalten. BufferedWriter puffert das Schreiben. Es wird nur noch in die Datei geschrieben, wenn die Methode flush() oder close() aufgerufen wird.  bessere Performance !

24 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Lesen von Dateien allgemein: Lesen von Streams –Stream: Abstraktion der Information, die von Gerät geliefert bzw. an Gerät geschickt wird –hier: nur Lesen aus (Text-)Dateien Unterschiede hinsichtlich der Menge der Zeichen, die in einem Schritt gelesen werden: –ein Buchstabe: FileReader –eine Zeichenkette einer bestimmten Länge –eine Zeile: BufferedReader –eine Token (Zeichenkette, die von bestimmten Zeichen abgegrenzt werden): StreamTokenizer

25 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Datei zum lesen öffnen: FileReader fr = new FileReader(“Dateiname“); FileReader ermöglicht das zeichenweise Lesen von Dateiinhalten unpraktisch für ASCII-Dateien mit Messwerten oder Texten besser: Erzeugen eines BufferedReader aus FileReader Zeichenweises Lesen aus Dateien

26 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Zeilenweises Lesen aus Dateien Datei öffnen: BufferedReader br = new BufferedReader(new FileReader(“Dateiname“)); BufferedReader fasst die Zeichen aus dem FileReader zu Zeichenketten zusammen Der BufferedReader verfügt u.a. über die Methoden –readLine(): auslesen der nächsten Zeile (bis zum nächsten Zeilenumbruch) in einen String –close(): schließen der Datei Weitere Methoden: JavaDoc

27 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Java und ASCII-Dateien - öffnen und (ein-)lesen - Beispiel : import java.io.*;................................. BufferedReader br; String line; int i = 0; try{ br = new BufferedReader(new FileReader("c:\\Koordinaten.txt")); while( (line = br.readLine()) != null){ //für jede Zeile wird Konstruktor von von Punkt aufgerufen punkt[i] = new Punkt( line); i = i+1; } br.close(); } catch( FileNotFoundException fnfe){ System.out.println(“The file :‘“+ filename +“‘ does not exist“); } catch( IOException ioe){ ioe.printStackTrace(); }

28 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Lesen von Token aus Textdatei Token Delimiter Token Delimiter

29 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Lesen von Token aus Textdatei Token: Teil eines Strings (Stream), der von Delimitern begrenzt wird Beispiel: –String: "abc de,f 66,z-2" –Delimiter: {" "} //Leerzeichen 3 Token: abcde,f66,z-2 –Delimiter: {" ",","} //Leerzeichen und Komma 5 Token: abc de f 66 z-2 Ziel: Extraktion der Token aus String, die bestimmte Bedeutung haben (Parsen) –Abhängig von Menge der Delimiter

30 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Extraktion von Token: Klasse StreamTokenizer Standard-Delimiter: Leerzeichen, Zeilenende, Dateiende,... (können ergänzt werden) Methoden von StreamTokenizer: –StreamTokenizer(Reader): Konstruktor –int nextToken(): schaltet auf nächstes Token um Attribute eines Token: –int ttype: Typ des Token TT_EOF: Dateiende TT_EOL: Zeilenende TT_NUMBER : Zahl TT_WORD : String –double nval: Token als double –String sval:Token als String

31 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Beispiel: Lesen von Token aus Textdatei import java.io.*;................ try{ FileReader fr = new FileReader("M:\\Java\\Beispiel.txt"); StreamTokenizer st = new StreamTokenizer(fr); double d; String s; while(st.nextToken() != StreamTokenizer.TT_EOF){ switch (st.ttype){ case StreamTokenizer.TT_NUMBER: d = st.nval; break; case StreamTokenizer.TT_WORD: s = st.sval; break; default: break;} //hier kann mit d und s etwas gemacht werden } fr.close(); }catch(Exception e) { ;}

32 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Extraktion von Token: Klasse StringTokenizer ähnlich zu StreamTokenizer arbeitet auf Strings (z.B. Zeile aus Textdatei) Konstruktor (zu parsender String und Delimiter): StringTokenizer st = new StringTokenizer(str,";"); Methoden: –boolean hasMoreTokens() –String nextToken() importieren des Package java.util

33 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 StringTokenizer: Beispiel try{ StringTokenizer st = new StringTokenizer("ABC;DEF;GH",";"); while(st.hasMoreTokens()){ System.out.println(st.nextToken()); } catch(Exception e) {e.printStackTrace();} //Ausgabe: //ABC //DEF //GH

34 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Exkurs: Konvertieren von Strings Konvertieren von Strings in double: Double.parseDouble. Beispiel: String s = "4.6566"; double d = Double.parseDouble(s); //nun steht in d die Zahl 4.6566

35 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 ENDE FRAGEN ?

36 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Hausaufgabe Lest aus der Datei "zahlen.txt" die 6 Zahlen ein und gebt die Summe dieser 6 Zahlen in eine Datei "ergebnis.txt" aus. Datei "zahlen.txt": 7.99 4.98 2.77 2.0 22.99 43.98

37 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Fortgeschrittene Übungsaufgabe (1/2) Ergänze die Klasse Polygon (Vorlesung 11) um eine Methode, die die Datei "polygon.txt" (nächste Folie) einliest und daraus ein Polygon mit 5 Punkten erzeugt. In einer Zeile dieser Datei steht die Punktnummer, die x-Koordinate und die y-Koordinate eines Punktes. Teste die Funktionen in einer Klasse Test_Main.

38 IKG Gröger, Dörschlag, Plümer, „Einführung in die Programmierung mit Java“ WS04/05 Dörschlag IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04 Fortgeschrittene Übungsaufgabe (2/2) Datei polygon.txt 1 2.0 3.0 2 4.0 3.0 3 8.0 9.0 4 7.0 10.0 5 1.0 6.0


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit."

Ähnliche Präsentationen


Google-Anzeigen