380 likes | 503 Views
Einführung in die Programmierung mit Java. 10. Vorlesung WS-03/04. Formatieren des Quellcodes. Regeln: Klassennamen fangen mit GROßEN Buchstaben an. Attributs-, Variablen- und Methodenname fangen mit kleinen Buchstaben an.
E N D
Einführung in dieProgrammierung mit Java 10. Vorlesung WS-03/04
Formatieren des Quellcodes • Regeln: • Klassennamen fangen mit GROßEN Buchstaben an. • Attributs-, Variablen- und Methodenname fangen mit kleinen Buchstaben an. • Nach jedem Semikolon ; (außer in for-Schleifen) und nach jeder geschweiften Klammer auf { und zu } folgt ein Zeilenumbruch ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Formatieren des Quellcodes- und warum ?? - • Bessere Lesbarkeit • Einfacheres Finden von Fehlern ! class Punkt { public double x,y,z; public Punkt(double x, double y, double z){this.x=x;this.y=y;this.z=z;} public distanz_zu(Punkt anderer){double delta_x=this.x-anderer.x,double delta_y=this.y-anderer.y;return(Math.sqrt(delta_x*delta_x+delta_y*delta_y));} } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Formatieren des Quellcodes- und warum ?? - • Bessere Lesbarkeit • Einfacheres Finden von Fehlern ! class Punkt { public double x,y,z; public Punkt(double x, double y, double z){ this.x = x; this.y = y; this.z = z; } public distanz_zu(Punkt anderer){ double delta_x = this.x-anderer.x, double delta_y = this.y-anderer.y; return(Math.sqrt(delta_x*delta_x+delta_y*delta_y)); } } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Formatieren des Quellcodes- und warum ?? - • Bessere Lesbarkeit • Einfacheres Finden von Fehlern ! • Die Fehlermeldungen des Compilers sind ZEILEN spezifisch class Punkt { public double x,y,z; public Punkt(double x, double y, double z){this.x=x;this.y=y;this.z=z;} public distanz_zu(Punkt anderer){double delta_x=this.x-anderer.x,double delta_y=this.y-anderer.y;return(Math.sqrt(delta_x*delta_x+delta_y*delta_y));} } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Formatieren des Quellcodes- und warum ?? - • Bessere Lesbarkeit • Einfacheres Finden von Fehlern ! • Die Fehlermeldungen des Compilers sind ZEILEN spezifisch class Punkt { public double x,y,z; ... public distanz_zu(Punkt anderer){ double delta_x=this.x-anderer.x, double delta_y=this.y-anderer.y; return(Math.sqrt(delta_x*delta_x+delta_y*delta_y)); } } 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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fehlertypen- z.B. NullPointerException, ClassCastException - 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. Beispiel : Student student; student.drucke_ausweis(); IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
ClassCastException ( extends Exception) Tritt auf, wenn ein Objekt mittels expliziter Typenkonvertierung in eine Typ umgewandelt wird, welcher nicht zu seinen Ahnen gehört Beispiel : Student student = new Student(“Dirk“,“Dörschlag“); Dozent dozent = (Dozent) student; Fehlertypen- z.B. NullPointerException, ClassCastException - ArrayIndexOutOfBoundsException ( extends Exception) Tritt auf, wenn auf ein Arrayelement zugegriffen wird, das nicht existiert. Beispiel : Student student = new Student[2] Student student[3] = new Student(“Dirk“,“Dörschlag“); IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fang den Fehler und handle- try{ anweisung } catch ( fehler ) { warnung } - Anweisungen, bei denen ein Fehler auftreten kann. Syntax : try{ anweisung(en); } catch( Fehlertyp e){ anweisung(en); } Anweisungen, die ausgeführt werden, sobald ein Fehler aufgetreten ist IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fang den Fehler und handle- try{ anweisung } catch ( fehler ) { warnung } - public class Polygon { private Punkt[] eckpunkt; ... public void punkt_einfuegen( int position, Punkt punkt){ try{ eckpunkt[ position] = punkt; } catch( Exception e){ System.out.println(“Polygon.punkt_einfuegen()“+ “::Ein Fehler wurde erkannt!“); } } ... } Fehlertyp = irgend ein Fehler IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fang den Fehler und handle- Differenzierung nach Fehlertyp - Anweisungen, bei denen ein Fehler auftreten kann. Syntax : try{ anweisung(en); } catch( Fehlertyp_1 f1){ anweisung(en); } catch( Fehlertyp_2 f2){ anweisung(en); } Anweisungen, die ausgeführt werden, sobald ein Fehlertyp_1 aufgetreten ist Anweisungen, die ausgeführt werden, sobald ein Fehlertyp_2 aufgetreten ist IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fang den Fehler und handle- try{ anweisung } catch ( fehler ) { warnung } - 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!“); } } } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fang den Fehler und handle- try{ anweisung } catch ( fehler ) { warnung } - public class Polygon { public void punkt_einfuegen( int position, Punkt punkt){ try{ eckpunkt[ position] = punkt; } catch( Exception e){ System.out.println(“Polygon.punkt_einfuegen()“+ “::Ein Fehler wurde erkannt!“); } catch( NullPointerException npe){ System.out.println(“Polygon.punkt_einfuegen()“+ “::Eckpunkte nicht angelegt!“); } } } Die Reihenfolge ist wichtig ! da spezieller ! immer erst den spezielleren Fehler fangen ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fehlermeldungen weiterwerfen- throws Fehlertyp - Syntax : modifierclass Klassenname { ... modifier rueckgabetyp methodenname( parameter) throws Fehlertyp_1(, Fehlertyp_2, ...) { anweisung(en); } ... } die Methode wird an der Stelle abgebrochen, an der der Fehler auftritt ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Fehlermeldungen weiterwerfen- throws fehler - public class Polygon { private Punkt[] eckpunkt; ... public void leeres_Polygon( int anzahl_eckpunkte) throws Exception{ eckpunkt = new Punkt[ anzahl_eckpunkte]; } ... } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Selbst Fehler werfen- throw( fehler); - Syntax : thrownew Fehlertyp(Parameter_des_Konstruktors); mit Aufruf einer throw-Anweisung wird die Methode an dieser Stelle abgebrochen ! Eine Methode, in der eine throw-Anweisung enthalten ist, muss diese Fehler weiterwerfen (throws) oder behandeln (try{}catch(){}) ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Selbst Fehler werfen- throw( fehler); - public class Polygon { private Punkt[] eckpunkt; ... public void leeres_Polygon( int anzahl_eckpunkte) throws Exception{ if( anzahl_eckpunkte < 1){ throw( new Exception( “Polygon.leeres_Polygon(#)::“+ “zu wenig Eckpunkte“)); } eckpunkt = new Punkt[ anzahl_eckpunkte]; } ... } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Java und ASCII-Dateien Messwerte Mein Programm Ergebnisse PNR X Y Z IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Java und ASCII-Dateien- öffnen und (ein-)lesen - • Datei zum lesen öffnen • Syntax : • FileReader fr = new FileReader(“Dateiname“); • FileReader ermöglicht das zeichenweise lesen von Dateiinhalten. • unpraktisch für ASCII-Dateien mit Messwerten oder Texten IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Java und ASCII-Dateien- öffnen und (ein-)lesen - Besser : Syntax : BufferedReader br = new BufferedReader(new FileReader(“Dateiname“)); BufferedReader fasst die Zeichen aus dem FileReader zu Zeichenketten zusammen und puffert die Leseoperationen. Der BufferedReader verfügt u.a. über die Methoden: br.readLine() :: auslesen der nächsten Zeile (bis zum nächsten Zeilenumbruch) in einen String br.close() :: schließen der Datei alle Methoden und der Konstruktor werfen Fehler vom Typ IOException im Falle eines Fehlers. Weitere Methoden können der JavaDoc entnommen werden. 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.*; class Polygon(){ private Punkt[] punkt; ... public void load(String filename){ BufferedReader br; String line; int i = 0; try{ br = new BufferedReader(new FileReader( filename));while( (line = br.readLine()) != null){ punkt[i++] = new Punkt( line); } br.close(); } catch( FileNotFoundException fnfe){ System.out.println(“The file :‘“+ filename +“‘ does not exist“); } catch( IOException ioe){ ioe.printStackTrace(); }}} 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.*; class Polygon(){ private Punkt[] punkt; ... public void load(String filename) throws IOException{ BufferedReader br = new BufferedReader( new FileReader( filename)); String line; int i = 0; while( (line = br.readLine()) != null){ punkt[i++] = new Punkt( line); } br.close(); } } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Exkurs- Strings in Double-Werte wandeln - Beispiel : import java.io.*; class Distanz_Tabelle(){ private double[] distanz; ... public void load(String filename) throws IOException{ BufferedReader br = new BufferedReader( new FileReader( filename)); String line; int i = 0; while( (line = br.readLine()) != null){ distanz[i++] = Double.parseDouble( line); } br.close(); } } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Exkurs- Strings zerlegen - Beispiel : String line = “10.0;20.0;30.0;“; String[] parts = new String[3]; int first = 0, last, i = 0; while((last = line.indexOf(“;“, first)) != -1){ parts[i] = line.substring( first, last); i++; first = last + 1; } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Exkurs- Strings zerlegen - Beispiel : String line = “10.0;20.0;30.0;“; String[] parts = new String[3]; int first = 0, last, i = 0; while((last = line.indexOf(“;“, first)) != -1){ parts[i] = line.substring( first, last); i++; first = last + 1; } DEBUGGING ... line = “10.0;20.0;30.0;“ parts[0] = null parts[1] = null parts[2] = null last = 4 first = 0 i = 0 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Exkurs- Strings zerlegen - Beispiel : String line = “10.0;20.0;30.0;“; String[] parts = new String[3]; int first = 0, last, i = 0; while((last = line.indexOf(“;“, first)) != -1){ parts[i] = line.substring( first, last); i++; first = last + 1; } DEBUGGING ... line = “10.0;20.0;30.0;“ parts[0] = “10.0“ parts[1] = null parts[2] = null last = 4 first = 0 i = 0 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Exkurs- Strings zerlegen - Beispiel : String line = “10.0;20.0;30.0;“; String[] parts = new String[3]; int first = 0, last, i = 0; while((last = line.indexOf(“;“, first)) != -1){ parts[i] = line.substring( first, last); i++; first = last + 1; } DEBUGGING ... line = “10.0;20.0;30.0;“ parts[0] = “10.0“ parts[1] = null parts[2] = null last = 4 first = 0 i = 1 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Exkurs- Strings zerlegen - Beispiel : String line = “10.0;20.0;30.0;“; String[] parts = new String[3]; int first = 0, last, i = 0; while((last = line.indexOf(“;“, first)) != -1){ parts[i] = line.substring( first, last); i++; first = last + 1; } DEBUGGING ... line = “10.0;20.0;30.0;“ parts[0] = “10.0“ parts[1] = null parts[2] = null last = 4 first = 5 i = 1 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Exkurs- Strings zerlegen - Beispiel : String line = “10.0;20.0;30.0;“; String[] parts = new String[3]; int first = 0, last, i = 0; while((last = line.indexOf(“;“, first)) != -1){ parts[i] = line.substring( first, last); i++; first = last + 1; } DEBUGGING ... line = “10.0;20.0;30.0;“ parts[0] = “10.0“ parts[1] = null parts[2] = null last = 9 first = 5 i = 1 und so weiter ... IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Java und ASCII-Dateien- öffnen und schreiben - Datei zum Schreiben öffnen Syntax : FileWriter fr = new FileWriter(“Dateiname“); FileWriter ermöglicht das Schreiben von Dateiinhalten. IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Java und ASCII-Dateien- öffnen und schreiben - • Datei zum schreiben öffnen • Syntax : • 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 ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Java und ASCII-Dateien- öffnen und schreiben - • Datei zum schreiben öffnen • Syntax : • PrintWriter pw = new PrintWriter( • 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. • PrintWriter ermöglicht die Ausgabe aller primitiven Datentypen als Strings. IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Java und ASCII-Dateien- öffnen und schreiben - Beispiel : class Polygon{ private Punkt[] punkt; ... public void write(String filename) throws IOException{ PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( filename))); for( int i = 0; i < punkt.length; i++){ pw.write( punkt[i].gibID()); pw.write( “;“); pw.write( punkt[i]. gibX()); pw.write( “;“); pw.write( punkt[i]. gibY()); pw.writeln( “;“); } pw.close(); } } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
ENDE NOCH FRAGEN ??? IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Übungsaufgabe Schreibt eine Klasse Punkt mit den Attributen pnr, x und y, die die Methoden distanz_zu( Punkt other) und ausgabe() haben soll. Fange in der Methode distanz_zu(Punkt other) NullPointerExceptions ab. Schreibt eine Klasse Polygon, die unter Verwendung eines Arrays Punkte [punkt_hinzu(Punkt punkt)] aufnehmen und mittels der Methode umfang() ihren aktuellen Umfang berechen kann und zudem eine Methode ausgabe() besitzt. Eventuell mögliche Exceptions sind zu fangen ! Teste die Funktionen in einer Klasse Test_Main. IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Hausaufgabe(1/2) Ergänze die Klasse Punkt aus der Übung um den Konstruktor Punkt( String line), wobei gilt: line=“pnr;x-wert;y-wert;“. (siehe auch eine Zeile der polygon.txt !!) Ergänze die Klasse Polygon aus der Übung um eine Methode lade(String dateiname) zum Einlesen eines Polygons aus einer Datei und um eine Methode datei_ausgabe(String dateiname) zum Ausgeben der Punktnummern der Punkte im Polygon, sowie des Polygonumfangs in eine Datei. Teste die Funktionen in einer Klasse Test_Main. IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Hausaufgabe(1/2) 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; IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04