Einführung in die Programmierung mit Java

Werbung
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
10. Vorlesung WS-03/04
Formatieren des Quellcodes
Regeln:
1.
2.
3.
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Formatieren des Quellcodes
- und warum ?? 1.
2.
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
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Formatieren des Quellcodes
- und warum ?? 1.
2.
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Formatieren des Quellcodes
- und warum ?? 1.
2.
3.
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
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Formatieren des Quellcodes
- und warum ?? 1.
2.
3.
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Fehlertypen
- z.B. NullPointerException, ClassCastException 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;
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Fang den Fehler und handle
- try{ anweisung } catch ( fehler ) { warnung } Syntax :
try{
anweisung(en);
}
catch( Fehlertyp e){
anweisung(en);
}
Anweisungen, bei
denen ein Fehler
auftreten kann.
Anweisungen, die
ausgeführt werden,
sobald ein Fehler
aufgetreten ist
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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;
Fehlertyp =
}
irgend ein Fehler
catch( Exception e){
System.out.println(“Polygon.punkt_einfuegen()“+
“::Ein Fehler wurde erkannt!“);
}
}
...
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Fang den Fehler und handle
- Differenzierung nach Fehlertyp Syntax :
try{
anweisung(en);
}
catch( Fehlertyp_1 f1){
anweisung(en);
}
catch( Fehlertyp_2 f2){
anweisung(en);
}
Anweisungen, bei
denen ein Fehler
auftreten kann.
Anweisungen, die
ausgeführt werden,
sobald ein Fehlertyp_1
aufgetreten ist
Anweisungen, die
ausgeführt werden,
sobald ein Fehlertyp_2
aufgetreten ist
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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()“+
Die
“::Ein Fehler wurde erkannt!“);
Reihenfolge
}
ist
catch( NullPointerException npe){
da spezieller !
wichtig !
System.out.println(“Polygon.punkt_einfuegen()“+
“::Eckpunkte nicht angelegt!“);
}
}
immer erst den spezielleren Fehler fangen !
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Fehlermeldungen weiterwerfen
- throws Fehlertyp Syntax :
modifier class 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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Selbst Fehler werfen
- throw( fehler); Syntax :
throw new 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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Java und ASCII-Dateien
Messwerte
Mein Programm
Ergebnisse
PNR
X
Y
Z
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Beispiel :
import java.io.*;
Java und ASCII-Dateien
- öffnen und (ein-)lesen -
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Exkurs
- Strings zerlegen Beispiel :
DEBUGGING ...
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;
}
line
parts[0]
parts[1]
parts[2]
last
first
i
= “10.0;20.0;30.0;“
= null
= null
= null
=4
=0
=0
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Exkurs
- Strings zerlegen Beispiel :
DEBUGGING ...
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;
}
line
parts[0]
parts[1]
parts[2]
last
first
i
= “10.0;20.0;30.0;“
= “10.0“
= null
= null
=4
=0
=0
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Exkurs
- Strings zerlegen Beispiel :
DEBUGGING ...
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;
}
line
parts[0]
parts[1]
parts[2]
last
first
i
= “10.0;20.0;30.0;“
= “10.0“
= null
= null
=4
=0
=1
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Exkurs
- Strings zerlegen Beispiel :
DEBUGGING ...
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;
}
line
parts[0]
parts[1]
parts[2]
last
first
i
= “10.0;20.0;30.0;“
= “10.0“
= null
= null
=4
=5
=1
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Exkurs
- Strings zerlegen Beispiel :
DEBUGGING ...
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;
}
und so weiter ...
line
parts[0]
parts[1]
parts[2]
last
first
i
= “10.0;20.0;30.0;“
= “10.0“
= null
= null
=9
=5
=1
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Beispiel :
class Polygon{
private Punkt[] punkt;
- öffnen und schreiben ...
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();
}
}
Java und ASCII-Dateien
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
ENDE
NOCH FRAGEN ???
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
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
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Herunterladen