Prof. Dott.-Ing. Roberto V. Zicari Datenbanken und Informationssysteme Fachbereich Informatik und Mathematik Grundlagen der Programmierung 2 Sommersemester 2009 Aufgabenblatt Nr. 12 Ausgabe: Mittwoch 8. Juli 2009 Abgabe: Mittwoch 15. Juli 2009 vor der Vorlesung Notieren Sie bitte stets auf Ihrer Abgabe sowohl den Termin Ihrer Übung als auch den Namen Ihres Tutors und schließlich Ihren eigenen Namen! Bitte beachten Sie, dass zu Ihrer Lösung zugehöriger Quellcode sowohl gedruckt abgegeben als auch per Email an den entsprechenden Tutor gesendet werden muss! Aufgabe 1 (8 Punkte) Java - Grundlagen a) Erläutern Sie die Vorteile von Interfaces in Java. Wann ist es sinnvoller eine abstrakte Klasse anstelle eines Interfaces zu verwenden? (4 Punkte) b) Dangling-Else-Problem: Welchen Wert müssen die Variablen bedingung1” ” und bedingung2” im nachfolgenden Javacode-Ausschnitt haben, damit der ” String Die zweite Ausgabe.” ausgegeben wird? (4 Punkte) ” i f ( bedingung1 = = true ) i f ( bedingung2 = = true ) System . o u t . p r i n t l n ( ” Die e r s t e Ausgabe . ” ) ; else System . o u t . p r i n t l n ( ” Die z w e i t e Ausgabe . ” ) ; Aufgabe 2 (12 Punkte) Java - Streams Auf der Web-Seite der Vorlesung finden Sie eine Text-Datei unsortiert.txt”, die ” mit Zufallszahlen gefüllt ist. Die Zahlen sind durch ; ” voneinander getrennt. ” a) Schreiben Sie ein Java-Programm, dass die Zahlen aus der Datei einliest und in einen geeigneten Type abspeichert, z.B. Collections. b) Schreiben Sie eine Methode sortieren”, welche die Zahlen der Größe nach ” sortiert und diese in einer Datei sortiert.txt” ausgibt. ” 1 Prof. Dott.-Ing. Roberto V. Zicari Datenbanken und Informationssysteme Fachbereich Informatik und Mathematik Aufgabe 3 (16 Punkte) Java - Interfaces a) Entwickeln Sie ein Interface namens Flying, das eine Methode fly() deklariert. Diese Methode soll keinen Rückgabewert besitzen und keine Parameter erwarten. b) Entwickeln Sie dann eine Klasse Biene, die das Interface Flying implementiert. Geben Sie in der zu implementierenden Methode Flying() den String Summherum” auf der Standardausgabe aus. Kompilieren Sie Ihren Code, ” um ihn auf Fehlerfreiheit zu überprüfen. c) Entwickeln Sie eine Java-Applikation und erstellen Sie innerhalb der Methode main() ein Objekt basierend auf der Klasse Biene. Rufen Sie eine neu zu definierende Methode departure() auf, der Sie das Objekt vom Typ Biene übergeben. Die Methode departure() soll keinen Rückgabewert besitzen und ein Objekt vom Typ des Interfaces Flying erwarten. Rufen Sie für den Parameter vom Typ Flying innerhalb der Methode departure() die Methode Flying() auf, und kompilieren und führen Sie die Anwendung dann aus. d) Modifizieren Sie das in Aufgabe a) entwickelte Interface Flying und wandeln Sie es in eine abstrakte Klasse um. Passen Sie Ihre Klassen Biene so an, dass die entwickelte Java-Applikation immer noch funktioniert. Aufgabe 4 (12 Punkte) Java - Strings Gegeben sei folgender Ausschnitt aus einem Java Programm: S t r i n g x = ” xyyz ” ; x . toUpperCase ( ) ; S t r i n g y = x . r e p l a c e ( ’Y ’ , ’ y ’ ) ; y = y + ” abc ” ; System . o u t . p r i n t l n ( y ) ; Was ist das Ergebnis? Bitte Begründen Sie ihre Auswahl. a) abcXyyZ b) abcxyyz c) XyyZabc d) xyyzabc e) Der Code enthält einen Fehler und kann nicht kompiliert werden. f) Das Programm bricht zur Laufzeit mit einer Fehlermeldung ab. 2 Prof. Dott.-Ing. Roberto V. Zicari Datenbanken und Informationssysteme Fachbereich Informatik und Mathematik Aufgabe 5 (30 Punkte) Java - Türme von Hanoi Folgende Aufgabe gehört zu den Grundlagen der Programmierung im Informatikstudium: Es gibt drei Stäbe. Auf einem dieser Stäbe (Stab 0) sind Scheiben unterschiedlichen Durchmessers nach absteigendem Durchmesser gestapelt. Die Aufgabe besteht nun darin, diesen Turm scheibenweise auf einen anderen Stab (Stab 2) zu transportieren, so dass erstens immer nur eine Scheibe bewegt wird und zweitens nie eine grössere auf einer kleineren zu liegen kommt. Implementieren Sie die Türme von Hanoi als Applikation. Es soll möglich sein der main-Methode als Argument die Anzahl der Ringe (die sich zu Beginn auf Stab 0 befinden) zu übergeben. Daraufhin wird der Algorithmus ausgeführt und die Bewegungen der Ringe von Stab zu Stab per System.out.println() ausgegeben. Tipp: Nutzen Sie eine Methode, welche sich rekursiv selbst aufruft. Nicht vergessen: Programmieraufgaben werden nur dann akzeptiert, wenn eine erläuternde Implementierungsdokumentation per javadoc vorhanden ist. Aufgabe 6 (10 Punkte) Java - Arrays Gegeben sei die folgende Klasse: public class ArrayTest { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { S t r i n g [ ] arguments = { ”1” , ”2” , ”3” } ; int x = arguments . length ; f o r ( i n t z =1; z<=x ; z ++) { System . o u t . p r i n t ( ” ” + a r g u m e n t s [ z ] ) ; } } } Was ist das Ergebnis? Bitte Begründen Sie ihre Auswahl. a) 0 0 0 b) 1 2 3 c) null null null d) Die Klasse enthält einen Fehler und kann nicht kompiliert werden. e) Das Programm bricht zur Laufzeit mit einer Fehlermeldung ab. 3 Prof. Dott.-Ing. Roberto V. Zicari Datenbanken und Informationssysteme Fachbereich Informatik und Mathematik Aufgabe 7 (12 Punkte) Java - Fehlersuche Gegeben sei die Klasse Moeter (Zeile 1-29) in der Datei MoeterClass.java: 0 1 : import j a v a . u t i l . ∗ ; 02: 0 3 : p u b l i c c l a s s M o e t e r e x t e n d s Mensch , K o e t e r { 04: 05: private int a l t e r ; 06: 07: p u b l i c Moeter ( i n t a l t e r ) { 08: this . alter = alter ; 09: super ( a l t e r ) ; 10: } 11: 12: void p r i n t ( byte j ) { 13: f o r ( b y t e i = j ; i < 1 5 0 ; i ++) { 14: i f ( i == 1 ) 15: System . p r i n t l n ( ” E i n s a m e r −M o e t e r ” ) ; 16: e l s e i f ( i < 150) 17: System . p r i n t l n ( i + ” ” + ” M o e t e r s ” ) ; 18: else 19: System . p r i n t l n ( ”Da s t i m m t was n i c h t ! ” ) ; 20: } 21: } 22: 23: p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 24: int a l t e r = 6; 25: Moeter m = Moeter ( a l t e r ) ; 26: byte j = 54; 27: m. p r i n t ( j ) ; 28: } 29: } Der Code der Klasse Moeter enthält einige Fehler und kompiliert nicht. Bitte nennen Sie jede Zeile, in der etwas nicht stimmt. Erläutern Sie jeweils kurz, was das Problem ist. Die Fehler können auch logische Fehler in der Programmierung sein. 4