Übungsblatt Grundlagen der Programmierung II

Werbung
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
Herunterladen