Übungen zum Thema Exceptions Übung 1 Eine Methode in der Klasse Operationen (siehe unten) soll die Wurzel einer reellen Zahl berechnen. Falls dieser Methode eine negative Zahl übergeben wird, soll sie die NegativeNumberException aufwerfen, welche bereits als von Exception abgeleitete Klasse existiert. public class Operationen { ... public static float wurzel(float x) throws NegativeNumberException { ... } ... } a) Schreiben Sie den dazugehörigen Methodenkörper. b) Entwerfen Sie für diese Methode anschliessend ein kleines Programm (mainMethode) für den White-Box-Test 1). Dieses soll mit Hilfe von System.out.println(...) seinen Befund ausgeben. Notieren Sie, welchen Befund Sie beim Ausführen des Tests erwarten. c) 1) Beim White-Box-Test wird im zu prüfenden Programmstück jede Zeile mindestens einmal durchlaufen. Übung 2 Betrachten Sie den folgenden Programm-Code und beurteilen Sie die Aussagen darüber in der Tabelle auf der nächsten Seite. Die Zeilennummern dienen der Orientierung und gehören nicht zum Programm-Code! 1. class Quotient { 2. 3. public static void main (String [] args) { 4. try { 5. System.out.println("Quotient = " + quotient(args[0],args[1])); 6. } 7. catch (ArithmeticException e) { 8. System.out.println("Nicht durch 0 dividieren!"); 9. } 10. } 11. 12. private static int quotient (String zahl1, String zahl2) 13. throws NumberFormatException { 14. try { 15. return Integer.parseInt(zahl1) / Integer.parseInt(zahl2); 16. } 17. catch (NumberFormatException e) { 18. System.out.println("Falsches Format"); 19. return 0; 20. } 21. finally { 22. System.out.println("Danke!"); 23. } 24. } 25. 26. } Was wird auf der Java-Konsole ausgegeben? … nach folgenden Aufrufen 1. Java 800 200 2. Java drei 0 3. Java 0 drei 4. Java 0 10 5. Java 10 0 Übung 3 Um die 64 Felder eines Schachbretts eindeutig spezifizieren zu können, werden die Kolonnen mit den Buchstaben 'a' bis 'h' und die Reihen mit den Zahlen '1' bis '8' bezeichnet. Eine eindeutige Feldangabe besteht sodann genau aus zwei Zeichen, wobei das erste Zeichen ein Buchstabe ist. Gültige Feldbezeichnungen sind also beispielsweise "a1" oder "g7". Schreiben Sie eine Methode boolean checkChessField(String txt) / pruefeFeld(String txt), die überprüft, ob der übergebene String str eine korrekte Bezeichnung eines Feldes auf dem Schachbrett darstellt. Allenfalls vorhandene Leerzeichen am Anfang oder Ende des Strings sollen zuvor entfernt werden. Falls der String nicht korrekt ist, soll die Methode eine IllegalFieldException / FieldErrorException erzeugen. Diese Exceptionklasse ist gegeben und besitzt den folgenden Konstruktor: // public FieldErrorException( String errormessage) public IllegalFieldException(String errormessage) Beim Auftreten einer Exception soll dem Konstruktor in errormessage ein kurzer String mitgegeben werden, der den jeweiligen Fehlergrund beschreibt. Die Aufgabe ist in folgenden drei Teilen zu lösen: 1. Stellen Sie eine Liste der möglichen Fehlerfälle zusammen. 2. Schreiben Sie die Methode checkChessField(String txt)/pruefeFeld(String txt). 3. Schreiben Sie einen Aufruf der Methode checkChessField / pruefeFeld, der die allenfalls entstehenden Exceptions abfängt und behandelt, indem er eine Fehlermeldung auf die System-Konsole (System.out) ausgibt. Bemerkung: Allenfalls benötigte import-Anweisungen können Sie weglassen! Übung 4 Der Methode spanne / maxDifferenz werde ein eindimensionaler Array mit einer beliebigen Folge von ganzen positiven Zahlen übergeben. Die Zahlen im Array sind ungeordnet. Der Array muss mindestens zwei Zahlen enthalten. Beispiel eines Arrays mit einer gültigen Folge von Zahlen: { 12, 2043, 5, 4, 244, 7912 } Teilaufgabe 1: Schreiben Sie die Methode public int spanne/maxDifferenz (int[] a). Sie soll die Differenz zwischen der kleinsten und der grössten Zahl im Array a zurückgeben. Teilaufgabe 2: Ergänzen Sie die Methode spanne/maxDifferenz derart, dass sie bei Fehlerfällen folgende Exceptions auslöst: • • IllegalArgumentException , falls im Array eine oder mehrere negative Zahlen vorkommen. NullPointerException , falls der Array zu wenig Elemente enthält oder gar nicht existiert. Teilaufgabe 3: Schreiben Sie einen Aufruf der Methode spanne/maxDifferenz einschliesslich der dazu notwendigen Exception-Behandlung. Bei einer IllegalArgumentException ist der Text „Ungültiger Wert“ auf die Standardausgabe auszugeben, bei einer NullPointerException der Text „Zuwenig Elemente“.