Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Missverständnisse und Unklarheiten klären kann. Schreiben Sie die Lösungen auf leere nummerierte Blätter mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blätter (auch die Schmierblätter) ab. Für falsche oder nicht einleuchtende Lösungen bekommen Sie grundsätzlich keine Punkte. Wenn aber aus Ihren Notizen oder Bemerkungen ersichtlich ist, dass Ihr Gedankengang richtig war, können Sie Teilpunkte bekommen. Sie verlieren jedoch diese Möglichkeit, wenn Abschreiben oder Kommunikation während der Klausur nachgewiesen werden kann. Der Kern der Fragen wurde kursiv gesetzt.
In den letzten 15 Minuten werden keine Fragen mehr beantwortet..Aufgabe 1: Erweitern Sie die Klasse GanzWS (ähnlich wie Warteschlange in der Übung, jedoch nicht für Object sondern für int) um eine Methode posit, die dafür sorgt, dass alle Zahlen in der Warteschlange nichtnegativ werden (d.h. das Vorzeichen der negativen Zahlen wird verändert). Die Datenstruktur der Klasse (Implementiert als Ringpuffer) ist:
class GanzWS { protected int[] inhalt; protected int juengster, aeltester, anzahl; ...
Kommentieren Sie in Ihrer Lösung, wie werden folgenden Sonderfälle bearbeitet:
1. Die Warteschlange ist leer
2. Alle Zahlen sind positiv
Aufgabe 2: Betrachten Sie folgende Datenstruktur eines Kreuzgangs (aus alten Klostern):
class Quadrat { class Position { int x, y; }; class Farbe { int[]rgb = new int[3]; }; // rot, gruen, blau Position linksOben, rechtsUnten; // Ecken des Quadrats Farbe linie, flaeche; }
class Kreuzgang extends Quadrat { static int nummer; // Zähler für erzeugte Objekte Quadrat inneresQuadrat; }
class ZweiKreuzgaenge { public static void main (String[] args) { Kreuzgang links = new Kreuzgang(), rechts = new Kreuzgang(); ... } }
Die Algorithmen (Methoden und Anweisungen) lassen wir außer Acht. Zeichnen Sie nun die Datenstruktur (Variablen und Objekte mit Inhalt) des obigen Programms (main). Einfachheitshalber reicht es, die innere Struktur der Objekte jeder Klasse nur einmal zu zeichnen (auch wenn es mehrere Objekte von der Klasse gibt). Schreiben Sie die Namen der Variablen und die Klassen der Objekte zu den dazugehörigen Symbolen. Verwenden Sie in der Zeichnung folgende Symbole: Objekt = Wolke • Referenzvariable = kleines Quadrat • Basistyp-Variable = kleines Rechteck • Referenz = Pfeil.
Aufgabe 3. (40 Punkte, 15 Min): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stichworten dazu. Ohne Begründung gilt Ihre Antwort als falsch.
( ) Richtig
Die Konvertierung von Referenzen geschieht in Java immer automatisch.
( ) Falsch
Grund:
( ) Richtig
Die Standard-Multibehälter aus dem Paket
java.util sind
polymorphe Multibehälter
( ) Falsch (und keine generische)
Grund:
( ) Richtig
In ein
ObjectOutputStream müssen alle Objekte einer Datenstruktur (z.B. eines
Stapels)
( ) Falsch einzeln mit
writeObject
übertragen werden.
Grund:
( ) Richtig
Auf einen Knopfdruck (JButton)
können mehrere Lauscher reagieren.
( ) Falsch
Grund:
( ) Richtig
Um die Länge einer verketteten Liste zu ermitteln,
( ) Falsch muss man alle Knoten durchlaufen.
Grund:
( ) Richtig
reihung.length
kann zu verschiedenen Zeiten verschiedene Werte (mal
10, mal
20) liefern,
( ) Falsch obwohl die Länge von Reihungen nicht verändert
werden kann.
Grund:
( ) Richtig
Es ist möglich, dass
r1.equals(r2)
true
liefert,
( ) Falsch
r1.deepEquals(r2)
(die tiefe Gleichheit) aber
false
Grund:
( ) Richtig
Die Reihungsimplementierung eines Multibehälters braucht weniger Speicherplatz
( ) Falsch als die Listenimplementierung.
Grund:
Aufgabe 4: Schreiben Sie eine Methode mit fußgesteuerter Schleife (do-while) und Fallunterscheidung (switch), die dasselbe tut wie die folgende Methode mit for-Schleife (keine Zählschleife!) und Verzweigung (if):
void einszweidrei(char par) { boolean steuerung = true; for (System.out.println("eins"); steuerung; System.out.println("zwei")) { System.out.println("drei"); steuerung = false; }
if (par == 'a') System.out.println("aaa"); else if (par == 'e') System.out.println("aaa"); else if (par == 'p') System.out.println("ppp"); }
Aufgabe 5.: Farbmulti ist die Schnittstelle der Klassen Farbmenge und Farbsack; sie enthält die Methoden eintragen, entfernen, vorhanden (mit jeweils einem Parameter vom Typ Farbe – ähnlich wie in der Übung). Schreiben Sie nun eine boolean-Methode istFarbmenge mit einem Farbmulti-Parameter, die feststellt, ob der Parameter ein Farmenge- oder ein Farbsack-Objekt ist. Ihre Methode soll keine if-Anweisung enthalten.