dvg1 - 12 - ausnahmen 1 ausnahmen. 2 was sind programmfehler? programm erzielt gar kein ergebnis....

31
DVG1 - 12 - Ausnahmen DVG1 - 12 - Ausnahmen 1 Ausnahmen Ausnahmen

Upload: alrich-radel

Post on 05-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen 11

AusnahmenAusnahmen

Page 2: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

22 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Was sind Programmfehler?Was sind Programmfehler?

Programm erzielt gar kein Ergebnis.Programm erzielt gar kein Ergebnis.

Berechnetes Ergebnis stimmt nicht mit dem Berechnetes Ergebnis stimmt nicht mit dem erwarteten überein.erwarteten überein.

Programm verhält sich falsch oder unzweckmäßig Programm verhält sich falsch oder unzweckmäßig während der Abarbeitung, z.B.:während der Abarbeitung, z.B.: Absturz bei falscher Eingabe Absturz bei falscher Eingabe unendliche Zyklen bei fehlerhaften Parameternunendliche Zyklen bei fehlerhaften Parametern kein Ende bei bestimmten Aufgabenkein Ende bei bestimmten Aufgaben Programm arbeitet nicht reproduzierbar falschProgramm arbeitet nicht reproduzierbar falsch

Page 3: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

33 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

FehlerursachenFehlerursachenfehlerhafte Konzeptionfehlerhafte Konzeption

fehlerhafter Algorithmusfehlerhafter Algorithmus

fehlerhafte Syntaxfehlerhafte Syntax

fehlerhafte Realisierung der Konzeption bzw. des fehlerhafte Realisierung der Konzeption bzw. des AlgorithmusAlgorithmus

fehlerhafte Bedienung bzw. fehlerhafte Parameterfehlerhafte Bedienung bzw. fehlerhafte Parameter

Fehler innerhalb der VMFehler innerhalb der VM

fehlerhaftes Betriebssystemfehlerhaftes Betriebssystem

fehlerhafte Hardwarefehlerhafte Hardware

Page 4: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

44 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Ausnahmen in JAVAAusnahmen in JAVABefassen sich mit Fehlern, die zur Ausführungszeit eines Programms Befassen sich mit Fehlern, die zur Ausführungszeit eines Programms auftreten. Z.B.:auftreten. Z.B.:

Ein-/Ausgabe-Fehler, z.B.:Ein-/Ausgabe-Fehler, z.B.:

Lesefehler beiLesefehler bei

System.in.read(buffer);System.in.read(buffer); Laufzeitfehler, z.B.:Laufzeitfehler, z.B.:

int i = Integer.parseInt(args[0]);int i = Integer.parseInt(args[0]);

führt bei führt bei args[0]=="abc" args[0]=="abc" zu einer Ausnahme zu einer Ausnahme ""NNumberFormatException"umberFormatException"

arithmetische Fehler, z.B.:arithmetische Fehler, z.B.:

int i = 1/0;int i = 1/0;

führt zu einer Ausnahme führt zu einer Ausnahme ""ArithmeticException"ArithmeticException"

JAVA bietet komfortable und dennoch einfache Möglichkeiten zur JAVA bietet komfortable und dennoch einfache Möglichkeiten zur Behandlung von Ausnahmen.Behandlung von Ausnahmen.

Page 5: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

55 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public class test1public class test1

{{

public static void main ( String [] args)public static void main ( String [] args)

{{

int i = Integer.parseInt(args[0]);int i = Integer.parseInt(args[0]);

System.out.println("Es wurde der Wert "+i+" System.out.println("Es wurde der Wert "+i+" eingegeben.");eingegeben.");

}}

}}

"java test1 11234" ergibt:"java test1 11234" ergibt:

Es wurde der Wert 11234 eingegeben.Es wurde der Wert 11234 eingegeben.

"java test1 11234xx" ergibt:"java test1 11234xx" ergibt:

Exception in thread "main" java.lang.NumberFormatException: Exception in thread "main" java.lang.NumberFormatException: 11234xx11234xx

at java.lang.Integer.parseInt(Compiled Code)at java.lang.Integer.parseInt(Compiled Code)

at java.lang.Integer.parseInt(Integer.java:458)at java.lang.Integer.parseInt(Integer.java:458)

at test1.main(test1.java:5)at test1.main(test1.java:5)

Page 6: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

66 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Fehlerursache: Fehlerursache: 11234xx11234xx lässt sich nicht in eine lässt sich nicht in eine int-Größe umwandeln!int-Größe umwandeln!

Compilermeldung exakt und hilfreich für den Compilermeldung exakt und hilfreich für den Programmentwickler.Programmentwickler.

Der Anwender wird durch die Meldung Der Anwender wird durch die Meldung verunsichert und erfährt nicht, was er falsch verunsichert und erfährt nicht, was er falsch gemacht hat.gemacht hat.

Typischer Anruf des Anwenders: „Ich habe alles Typischer Anruf des Anwenders: „Ich habe alles genau so gemacht wie immer, aber seit heute genau so gemacht wie immer, aber seit heute funktioniert nichts mehr. Was ist los?“funktioniert nichts mehr. Was ist los?“

Page 7: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

77 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public class test2{public static void main ( String [] args) { try { int i = Integer.parseInt(args[0]); System.out.println("Es wurde der Wert "+i+" eingegeben."); } catch (NumberFormatException e) { System.out.println(args[0]+ " kann nicht in eine int-Groesse verwandelt werden!\n"+ "Der Parameter darf nur aus Ziffern 0..9 bestehen!"); }}}"java test2 11234" ergibt:Es wurde der Wert 11234 eingegeben."java test2 11234xx" ergibt:11234xx kann nicht in eine int-Groesse verwandelt werden!Der Parameter darf nur aus Ziffern 0..9 bestehen!"java test2" ergibt:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

at test2.main(test2.java:7)

Page 8: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

88 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public class test3{public static void main ( String [] args){ try { int i = Integer.parseInt(args[0]); System.out.println("Es wurde der Wert "+i+" eingegeben."); } catch (NumberFormatException e) { System.out.println(args[0]+ " kann nicht in eine int-Groesse verwandelt werden!\n"+ "Der Parameter darf nur aus Ziffern 0..9 bestehen!"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println( "Es muss mindestens ein Parameter angegeben werden!"); }}}"java test3" ergibt:Es muss mindestens ein Parameter angegeben werden!

Page 9: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

99 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public class test4{public static void main ( String [] args){ try { int i = Integer.parseInt(args[0]); System.out.println("Es wurde der Wert "+i+" eingegeben."); } catch (NumberFormatException e) { System.out.println(args[0]+ " kann nicht in eine int-Groesse verwandelt werden!\n"+ "Der Parameter darf nur aus Ziffern 0..9 bestehen!"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println( "Es muss mindestens ein Parameter angegeben werden!"); } finally { System.out.println( "Das Programm ist mehr oder weniger erfolgreich beendet."); }} }Egal wie das Programm beendet wird es gibt die Meldung aus:Das Programm ist mehr oder weniger erfolgreich beendet.

Page 10: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1010 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Allgemeine FormAllgemeine Formtry{// Block in dem Ausnahmen auftreten können}catch (Ausnahmetyp1 name){// Block in dem der Ausnahmetyp1 behandelt wird}...catch (AusnahmetypN name){// Block in dem der AusnahmetypN behandelt wird}finally{// finally- Block }

Page 11: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1111 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Nach einem try-Block muß immer mindestens ein Nach einem try-Block muß immer mindestens ein catch-Block existieren.catch-Block existieren.

Beim Eintreten einer Ausnahme wird der erste Beim Eintreten einer Ausnahme wird der erste passende catch-Block abgearbeitet.passende catch-Block abgearbeitet.

Der finally-Block muß immer nach allen catch-Der finally-Block muß immer nach allen catch-Blöcken stehen.Blöcken stehen.

Der finally-Block wird abgearbeitet:Der finally-Block wird abgearbeitet: nach dem „normalen“ Ende des try-Blockesnach dem „normalen“ Ende des try-Blockes nach einer behandelten Ausnahmenach einer behandelten Ausnahme vor einer Ausnahme, die weitergereicht wirdvor einer Ausnahme, die weitergereicht wird nach Verlassen des try-Blockes über eine break-, nach Verlassen des try-Blockes über eine break-,

continue- oder return-Anweisungcontinue- oder return-Anweisung

Page 12: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1212 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

try-Block Ausnahme Ausnahmetyp1 Catch-Block 1

AusnahmetypN Catch-Block N

Ausnahmetyp2 Catch-Block 2

finally-Block

Page 13: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1313 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

import java.io.*;public class test5{public static void main (String [] args){System.out.println("Gebe bitte eine Zeichenkette ein : ");BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));String s = br.readLine();System.out.println("Es wurde eingegeben :\n\""+s+"\"");}}

javac test5.java ergibt

test5.java:9: unreported exception java.io.IOException; must be caught or declared to be thrown

System.in.read(buffer);

Page 14: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1414 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public class test6{public static void main (String [] args){

System.out.println("Gebe bitte eine Zeichenkette ein : ");BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));try{

String s = br.readLine();System.out.println("Es wurde eingegeben :\n\""+s+"\"");

}catch (java.io.IOException e){}

}}java test6 ergibtGebe bitte eine Zeichenkette ein :Das ist ein Test.Es wurde eingegeben :"Das ist ein Test."

Page 15: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1515 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

geprüfte bzw. ungeprüfte Ausnahmengeprüfte bzw. ungeprüfte Ausnahmen

Ausnahmen Ausnahmen NumberFormatExceptionNumberFormatException undund ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException brauchten nicht abgefangen zu werden, d.h. es brauchten nicht abgefangen zu werden, d.h. es musste keine catch-Anweisung für diese musste keine catch-Anweisung für diese Ausnahmen angegeben werden. ==> ungeprüfte Ausnahmen angegeben werden. ==> ungeprüfte AusnahmenAusnahmen

Ausnahme Ausnahme java.io.IOException java.io.IOException musste musste abgefangen werden. ==> geprüfte Ausnahmenabgefangen werden. ==> geprüfte Ausnahmen

Page 16: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1616 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Throwable

Error

ungeprüft

IOException

geprüft

RuntimeException

ungeprüft

Exception

geprüft ungeprüft

Eigene Ausnahmen

nicht empfohlenEigene Ausnahmen

meist benutzt

Eigene Ausnahmen

möglich

Eigene Ausnahmen

nicht empfohlen

Ausnahmenhierarchie

Page 17: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1717 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Weiterreichen von AusnahmenWeiterreichen von Ausnahmen

Eine Ausnahme muss nicht in der Methode Eine Ausnahme muss nicht in der Methode behandelt werden, in der sie auftritt. Sie kann auch behandelt werden, in der sie auftritt. Sie kann auch an die aufrufende Methode weitergereicht werden.an die aufrufende Methode weitergereicht werden.

Das wird dem Compiler durch die throws-Klausel Das wird dem Compiler durch die throws-Klausel einer Methoden-Deklaration mitgeteilt, z.B.:einer Methoden-Deklaration mitgeteilt, z.B.:

public static String readString() public static String readString() throws java.io.IOExceptionthrows java.io.IOException

Page 18: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1818 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

import java.io.*;public class test7{public static void main (String [] args){ System.out.println("Gebe bitte eine Zeichenkette ein : "); System.out.println(

"Es wurde eingegeben :\n\""+readString()+"\"");}public static String readString(){

try{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

return br.readLine();}catch (IOException e){

return null;}

}}

Page 19: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

1919 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

import java.io.*;

public class test8{public static void main (String [] args) throws IOException{ System.out.println("Gebe bitte eine Zeichenkette ein : "); System.out.println(

"Es wurde eingegeben :\n\""+readString()+"\"");}public static String readString() throws IOException{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

return br.readLine();}}

Page 20: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2020 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Auslösen von AusnahmenAuslösen von Ausnahmen

Ausnahmen können durch das Programm Ausnahmen können durch das Programm ausgelöst werden, durchausgelöst werden, durch

throw new Ausnahme (...);throw new Ausnahme (...);

Page 21: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2121 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public class test9{public static void main (String [] args){ int z = Integer.parseInt(args[0]); int n = Integer.parseInt(args[1]);

if ( n == 0) { System.out.println("Der Nenner ist == 0 !"); throw new ArithmeticException("Nenner ist 0"); } else { System.out.println(z+"/"+n+"="+z/n); }}}

java test9 1 0 ergibt

Der Nenner ist == 0 !Exception in thread "main" java.lang.ArithmeticException: Nenner ist 0 at test9.main(test9.java:11)

Page 22: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2222 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Eigene AusnahmenEigene Ausnahmen

Ausnahmen sind Klassen, die von anderen Ausnahmen sind Klassen, die von anderen Ausnahmeklassen abgeleitet sind.Ausnahmeklassen abgeleitet sind.

Einfachste Form:Einfachste Form:

class Ausnahme extends OberKlasse { }class Ausnahme extends OberKlasse { }

z.B.:z.B.:

class Ausnahme extends Exception { }class Ausnahme extends Exception { }

Page 23: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2323 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public class test10{public static int f ( int z, int n ) throws Ausnahme{ if ( n == 0 ) { throw new Ausnahme(); } return z/n;}

public static void main (String [] args){ int z = Integer.parseInt(args[0]); int n = Integer.parseInt(args[1]); try { System.out.println(z+"/"+n+"="+f(z,n)); } catch (Ausnahme e) { System.out.println(e); }}}class Ausnahme extends Exception { }

java test10 10 0 ergibtAusnahme

Page 24: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2424 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

LesemethodenLesemethoden

Was wollen wir einlesen?Was wollen wir einlesen? Zeichenketten, TexteZeichenketten, Texte numerische Datennumerische Daten

ganze Zahlen (byte, short, int, long)ganze Zahlen (byte, short, int, long)

Gleitkommazahlen (float, double)Gleitkommazahlen (float, double) FelderFelder Auswahlen, MenüsAuswahlen, Menüs

Page 25: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2525 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

Einlesen von ZeichenkettenEinlesen von ZeichenkettenSystem.inSystem.in realisiert Eingabestrom von realisiert Eingabestrom von bytesbytes, wir , wir benötigen gepufferte Eingabe von Unicodezeichenketten.benötigen gepufferte Eingabe von Unicodezeichenketten.

InputStreamReader rd = new InputStreamReader rd = new InputStreamReader(System.in)InputStreamReader(System.in) erzeugt Eingabestrom erzeugt Eingabestrom von Unicodezeichen.von Unicodezeichen.

BufferedReader br = new BufferedReader(rd)BufferedReader br = new BufferedReader(rd) erzeugt gepufferten Eingabestrom von Unicodezeichen.erzeugt gepufferten Eingabestrom von Unicodezeichen.

Zusammen:Zusammen:BufferedReader br = new BufferedReader(new BufferedReader br = new BufferedReader(new InputStreamReader(System.in))InputStreamReader(System.in))

Page 26: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2626 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public static double readDouble ( ){

for (;;){ try { String s = readString();

return Double.parseDouble(s); } catch ( NumberFormatException e ) { System.out.print("Nochmal:"); }}}

Page 27: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2727 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public static double readDouble ( ){

for (;;){ try { String s = readString(); if ( s.compareToIgnoreCase("nan")==0 ) return 0.0/0.0; return Double.parseDouble(s); } catch ( NumberFormatException e ) { System.out.print("Nochmal:"); }}}

Page 28: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2828 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public static double readDouble ( double def ){ for (;;){ try { String s = readString(); if ( s.compareToIgnoreCase("nan")==0 ) return 0.0/0.0; if ( s.length() == 0 ) return def; return Double.parseDouble(s); } catch ( NumberFormatException e ) { System.out.print("Nochmal:"); }}}

Page 29: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

2929 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public static double readDouble ( String prompt, double def, String colon){ System.out.print(prompt+" ["+def+"] "+colon);for (;;){ try { String s = readString().trim(); if ( s.compareToIgnoreCase("nan")==0 ) return 0.0/0.0; if ( s.length() == 0 ) return def; return Double.parseDouble(s); } catch ( NumberFormatException e ) { System.out.print("Nochmal ["+def+"] "+colon); }}}

Page 30: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

3030 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public static double readDouble ( String prompt, String errorMessage, double def, String colon){ System.out.print(prompt+" ["+def+"] "+colon);for (;;){ try { String s = readString().trim(); if ( s.compareToIgnoreCase("nan")==0 ) return 0.0/0.0; if ( s.length() == 0 ) return def; return Double.parseDouble(s); } catch ( NumberFormatException e ) { System.out.print(errorMessage+" ["+def+"] "+colon); }}}

Page 31: DVG1 - 12 - Ausnahmen 1 Ausnahmen. 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht mit dem erwarteten

3131 DVG1 - 12 - AusnahmenDVG1 - 12 - Ausnahmen

public static double readDouble ( String prompt, String errorMessage, double def, String colon){String helpText ="Geben Sie bitte eine double-Groesse ein.\n"+"Die Eingabe darf aus den Ziffern 0..9 bestehen. Ausserdem koennen\n"+"ein Dezimalpunkt, das Zeichen \"E\" fuer den Exponenten,\n"+"sowie Vorzeichen vor der Zahl und dem Exponenten angegeben werden.\n"+"NaN erhaelt man durch Eingaben von \"NaN\".\nz.B.: -1.234567E-123";System.out.print(prompt+"(?=help) ["+def+"] "+colon);for (;;){ try { String s = readString().trim(); if ( s.compareTo("?")==0 ) { System.out.println(helpText); System.out.print(prompt+"(?=help) ["+def+"] "+colon); continue; } if ( s.compareToIgnoreCase("nan")==0 ) return 0.0/0.0; if ( s.length() == 0 ) return def; return Double.parseDouble(s); } catch ( NumberFormatException e ) { System.out.print(errorMessage+"(?=help) ["+def+"] "+colon); }}}