Lösung der Klausur Pr21 WS '00/'01


Aufgabe 1.

class ErwGanzWS extends GanzWS {
   public int durchschnitt() {
     int summe = 0;
     for (int i = 0; i < anzahl; i++) {
        int  element = inhalt[(aeltester + i) % inhalt.length];
        if (element < 0) element = - element; // element = Math.abs(element);
        summe += element;
     }
     return anzahl == 0 ? 0 : summe / anzahl;
   }
}

Aufgabe 2:

1. Gleichzeitiger Zugriff auf den Puffer soll vermieden werden – durch synchronized der Puffer-Zugriffsmethoden

2. Der Verbraucher möchte entnehmen, aber der Puffer leer ist:

   while (anzahl == 0) wait(); 

3. Der Erzeuger möchte in den (nicht vollen) Puffer schreiben, aber der letzte Platz im Puffer ist belegt –

   juengstes = (juengstes + 1) % inhalt.length;

4. Der Erzeuger soll nicht warten, wenn der Puffer nicht mehr voll ist

   notifyAll();

Aufgabe 3:

·    Verbesserungen von bubble sort (wie z.B. shaker sort) verbessern seine Komplexität nicht

Richtig: sie bleibt n2, wenn auch Laufzeitverbesserungen möglich sind.

·    Die Entwurfmuster „Fassade“ ist geeignet, Algorithmen implementierungsunabhängig zu formulieren.

Falsch: das ist template method; Fassade verbirgt Implementierungsdetails

·    In ein ObjectOutputStream müssen alle Objekte einzeln mit writeObject übertragen werden.

Falsch: ein writeObject überträgt die ganze Objektstruktur

·    Es gibt Objekte, die einem JFrame-Objekt hinzugefügt werden, und nicht sichtbar gemacht werden können.

Richtig: z.B. Lauscher

·    Von der Wurzel bis zum Blatt eines Binärbaums mit n Elementen führen im Durchschnitt n2 Schritte

Falsch log2 n

·    Eine Liste rekursiv durchzulaufen braucht genauso viel Zeit und Platz wie iterativ.

Falsch: Zeit ja, aber mehr Platz (Stapel durch Rekursion)

·    Es ist möglich, dass r1.equals(r2) true liefert,  r1.deepEquals(r2) (die tiefe Gleichheit) aber false

Falsch: Wenn der Inhalt zweier Objekte gleich ist, dann kommt deepEquals  zu den gleichen referierten Objekten

·    Die Reihungsimplementierung eines Multibehälters ist immer schneller als die verkettete Liste.

Falsch: nur fast immer (Dirketzugriff in der Reihung); nicht aber, wenn die Reihung wegen Überlaufs kopiert werden muss


Aufgabe 4.

import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class A4 extends JApplet {
   private JButton[] knoepfe = new JButton[10];
   public void init() {
     JPanel panel = new JPanel();
     getContentPane().add(panel);
     panel.setLayout(new FlowLayout());
     for (int i = 0; i < knoepfe.length; i++) {
        knoepfe[i] = new JButton("" + i);
        knoepfe[i].setBackground(Color.blue);
        knoepfe[i].addActionListener(lauscher);
        panel.add(knoepfe[i]);
     }
   }
   private int rot = 0;
   private ActionListener lauscher = new ActionListener() {
     public void actionPerformed(ActionEvent ereignis) {
        knoepfe[rot].setBackground(Color.blue);
        knoepfe[ereignis.getActionCommand().charAt(0) - '0'].setBackground(Color.red);
        rot = ereignis.getActionCommand().charAt(0) - '0';
     };
   };
}

Aufgabe 5. Unterschied zu Frame: kein Container-Objekt (getContentPane) zwischen Frame und Button