Medieninformatik: PRÜ1a - Programmieren (Java) im SS 2004, Prof. Knabe, 2004-05-03 Aufgabe 5: Aufruf einer Dienstmethode ohne Abgabetermin: 19. Mai 2004 Ausnahmebehandlung, Binden mehrerer Klassen, Verzweigung in Schleife. Sie benötigen im Verzeichnis http://www.tfh-berlin.de/~knabe/java/lib/ oder ftp://hrz.tfh-berlin.de/~knabe/homepage/public_html/java/lib/ die Dateien Fio.java sowie demo/Sum.java. Am besten kopieren Sie sich jedoch das komplette Verzeichnis lib mit seinem Unterverzeichnis demo. Die Klasse lib.Fio enthält eine public-Methode Fio.naechsteZahl(). Diese kann, wie bei ihr oder im Beispielprogramm Sum beschrieben, verschiedene Ausnahmen auslösen. Im Erfolgsfall liest sie eine Zeile ein und liefert ihre Interpretation als int-Zahl >= 0. Bsp.: final int nettoBetrag = lib.Fio.naechsteZahl(); a) Erweitern Sie damit die letzte Variante des Programms Brutto so, daß man beliebig viele Bruttobeträge während eines Programmlaufs ausrechnen kann. b) Alle von lib.Fio.naechsteZahl() auslösbaren Ausnahmen sollen Sie einmal testhalber provozieren. Kopieren Sie das Protokoll im MS-DOS-Fenster, drucken Sie es und geben es mit dem Programmtext ab. Bsp.-Dialog (Eingaben kursiv): D:\>java Brutto Lieferdatum ? 19921231 Nettobetrag ? 100 100 DM netto => 114.00000000000001 DM brutto! Lieferdatum ? 19930101 Nettobetrag ? 200 200 DM netto => 229.99999999999997 DM brutto! Lieferdatum ? 19980331 Nettobetrag ? 300 300 DM netto => 345.0 DM brutto! Lieferdatum ? 19980401 Nettobetrag ? 400 400 DM netto => 463.99999999999994 DM brutto! Lieferdatum ? ^C D:\> Hinweise: Für nicht ganzzahlige Beträge nehmen Sie bequemerweise den Gleitpunkttyp double, da Gleitpunktliterale wie 100.0 von diesem Typ sind. (float erfordert 100.0f). An den sehr krummen Bruttobeträgen sehen Sie, daß man mit den Gleitpunkttypen auch bei 17 Dezimalstellen Genauigkeit nicht kaufmännisch exakt rechnen kann. Es wäre ein Runden des Ergebnisses jeweils noch auf 2 Nachpunktstellen erforderlich. Zusatz für die Ehre: Lösen Sie die Aufgabenstellung profesionell, indem Sie kaumännisch exakt mittels Klasse java.math.BigDecimal rechnen. Sie finden diese Klasse dokumentiert im Labor unter der Java-Dokumentation oder im WWW unter http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html Den im Prinzip endlosen Dialog brechen Sie ab durch Eingabe von <Ctrl/C>, dt. <Strg/C>. Der Einfachheit halber sollen Sie keine der von lib.Fio.naechsteZahl() auslösbaren Ausnahmen individuell behandeln. Dazu müssen Sie in der Methodendeklaration von main für die auslösbaren Ausnahmen throws Exception angeben. Das Verzeichnis lib muß über Ihren CLASSPATH (siehe Beschreibung in [C:\chr\Java\pr1\04s05_Brutto_mehrmals\Aufgabe.oo.rtf] TextPad.oo.rtf der 3. Aufgabe) erreichbar sein, damit der Java-Compiler die Klasse lib.Fio fürs Übersetzen und Ausführen findet.