Lösung der Klausur Prg21 SS'05


Aufgabe 1.

static boolean istGleich{WS links, WS rechts) {
   Iterator ilinks = links.iterator(), irechts = rechts.iterator();
   while (ilinks.hasNext() && irechts.hasNext())
     if (! ilinks.next().equals(irechts.next())) return false;
   return ilinks.hasNext() != irechts.hasNext(); }

Aufgabe 2

class PersFarbmengeImpl extends FarbmengeImpl implements PersFarbmenge {
   public void speichern(String dateiname) { 
     new ObjectOutputStream(new FileOutputStream(dateiname)).writeObject(inhalt); }
   public void laden(final String dateiname) {
     inhalt = (boolean[])new ObjectInputStream(new FileInputStream(dateiname)).readObject(); } }

Aufgabe 3

Bemerkung: Die for-Schleife in der Aufgabenstellung sollte besser als Zählschleife formuliert werden (die Obergrenze spitze wird im Schleifenrumpf verändert).

public void entfernen(final Object element) {
   final int s = this.spitze;
   for (int index = 0; index <= s; index++)
     if (inhalt[index] == element) {
       inhalt[index] = inhalt[spitze]; spitze--; return; }
private Object[] inhalt; private int spitze;

Aufgabe 4:

(X) Falsch – Bessere Zeitkomplexität eines Sortierverfahrens muss mit schlechterer Speicherkomplexität erkauft werden.
Grund: Haldensort hat die beste Zeitkomplexität (n log n) und die beste Speicherkomplexität (konstant)

(X) Falsch – Die Reihenfolge der Eintragungen in einen Standard-Multibehälter ist immer relevant (wichtig).
Grund: java.io.Set-Klassen sind Mengen

(X) Falsch – Ein Brückenstrom verbindet Ein- und Ausgabeströme miteinander
Grund: Zeichen- und Byteorientierte Ströme (In/OutputStreamReader/Writer)

(X) Richtig/Falsch – Nebenläufige Prozesse in Java werden mit der Implementierung der Schnittstelle Runnable programmiert.
Grund für Falsch: Thread kann auch erweitert werden
Grund für Richtig: Thread erweitert Runnable

(X) Richtig – Es gibt Schleifen in Java, deren Endlichkeit vom Compiler garantiert wird.
Grund: for (int element in reihung)

(X) Richtig/Falsch – Ein generischer Multibehälter kann Objekte beliebiger Klassen aufnehmen.
Grund: Richtig, wenn für Object ausgeprägt; Falsch, wenn für etwas anderes

(X) Falsch – Die Darstellung eines XML-Dokuments kann entweder in einem DTD  oder in einem CSS definiert werden.
Grund: DTD ist für Strukturdefinition; XSL oder CSS ist für die Darstellung

(X) Richtig – Wenn die flache Gleichheit true liefert, liefert auch die tiefe Gleichheit true.
Grund: die referenzierten Objekte (untersucht bei tiefer Gleichheit) sind identisch


Aufgabe 5

class KonsolOberflaeche implements Oberflaeche {

   private Console konsole = new Console();

   private Rechenwerk rechenwerk;

   public KonsolOberflaeche(Rechenwerk rechenwerk) {

     this.rechenwerk = rechenwerk; }

   public void registrieren(ActionListener ziffernLauscher, ActionListener opLauscher){

     konsole.addActionListener(ziffernLauscher);

     konsole.addActionListener(opLauscher); }

   public void anzeigen() {

     konsole.println(rechenwerk.getZahl()); } }