Nachklausur Prg12 WS'06/'07

Aufgabe 1: In der Vorlesung haben wir eine Farbmenge implementiert. Ähnlich sieht eine Buchstabenmenge aus:

class Buchstabenmenge { protected boolean[] inhalt = new boolean[26]; // a bis z
   public void eintragen(char b) { inhalt[b – 'a'] = true; } // b ist Kleinbuchstabe
   public void enfernen(char b) { inhalt[b – 'a'] = false; }
   public boolean vorhanden(char b) { return inhalt[b – 'a']; } }

Erweitern Sie nun diese Klasse (mit extends) um die folgende Methode (ca. 9 Programmzeilen):

int anzahl(char[] buchstaben); // wie viele der buchstaben sind in der Menge vorhanden?

Aufgabe 2: Zeichnen Sie die Objektstruktur (alle Variablen, Objekte, Werte) für die Übungsaufgabe 15. Die Musterlösung:

public class Wetter extends JApplet implements ActionListener {
   private JLabel ergebnis; private JComboBox auswahl;
   public void init() { 
     auswahl = new JComboBox(); auswahl.addItem("sonnig"); auswahl.addItem("bewölkt");
     JButton berlin = new JButton("Berlin"); berlin.addActionListener(this);
     JButton muenchen = new JButton("München"); muenchen.addActionListener(this);
     ergebnis = new JLabel("Wetterbericht");
     JPanel hauptfeld = new JPanel(new GridLayout(1, 2, 30, 30));
     JPanel linkesFeld = new JPanel(new GridLayout(3, 1, 30, 30));
     JPanel rechtesFeld = new JPanel(new BorderLayout());
     linkesFeld.add(auswahl); linkesFeld.add(berlin); linkesFeld.add(muenchen);
     rechtesFeld.add(ergebnis); hauptfeld.add(linkesFeld); hauptfeld.add(rechtesFeld);
     Container contentPane = getContentPane(); contentPane.add(hauptfeld); }
   public void actionPerformed(ActionEvent ae) {
     ergebnis.setText(ae.getActionCommand() + auswahl.getSelectedItem()); }

Aufgabe 3: Programmieren Sie eine fehlertolerante Klasse ZweiObjekte mit den parameterlosen Methoden blau und weiss, ähnlich wie in der Übung 11. Beim Erzeugen eines Objekts soll ein leerer Eimer und ein leerer Kreis auf dem Bildschirm erscheinen; beim blau sollen beide blau, beim weiss sollen beide leer (nicht unsichtbar!) werden. Sie brauchen dazu folgende (alle public) Methoden und Klassen:

class Eimer { void anzeigen(); void fuellen() throws VollAusnahme;
   void entleeren() throws LeerAusnahme; ... }
class Kreis { void zeichnen(); void bemalen(Farbe farbe); void verstecken(); ... }
class Farbe { Farbe BLAU; ... }

Aufgabe 4. (40 Punkte, 15 Min): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stich­worten (nicht länger als die Zeile) dazu. Ohne Begründung gilt Ihre Antwort als falsch.

(     )     Richtig            Ein Objekt der Klasse StringBuffer kann nicht verändert werden.
(     )     Falsch

Grund:                                                                                                                                                                                                        

(     )     Richtig            Es gibt Operatoren mit einem, zwei und mit drei Operanden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Der Aufruf einer Funktion wie einer Prozedur ist immer wirkungslos:
(     )     Falsch             funktion(); // hat keine Wirkung

Grund:                                                                                                                                                                                                        

(     )     Richtig            Konstruktore und Destruktore werden nicht vererbt.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Eine leere Klasse kann mehrere Schnittstellen implementieren.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Eine final Referenz kann nicht verändert (verbogen) werden,
(     )     Falsch             das referierte Objekt kann jedoch verändert werden.

Grund:                                                                                                                                                                                                        

(     )     Richtig            for (int i = 1; i <= 10; i++) System.out.println(i++);
(     )     Falsch             ist keine Zählschleife.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Referenzen können vom Schnittstellentyp sein, Objekte nicht.
(     )     Falsch            

Grund:                                                                                                                                                                                                        


Aufgabe 5: In der folgenden (übersetzbaren aber logisch fehlerhaften) Klasse Stall gibt es drei Eimer:

import lehrbuch.Eimer;
public class Stall {
   protected Eimer winza, rekel, vivi; // jede Kuh hat ihren eigenen Eimer
   public morgentraenkung() throws VollAusnahme {
     winza.fuellen(); rekel.fuellen(); … } // andere Methoden für Kuhpflege
   public mittagstraenkung() throws VollAusnahme {
     vivi.fuellen(); rekel.fuellen(); … }
   public abendtraenkung() throws VollAusnahme {
     vivi.fuellen(); winza.fuellen(); … }

Beim (ein- oder mehrmaligen) Aufruf dieser Methoden werden Ausnahmen ausgeworfen. Erstellen Sie eine verbesserte Unterklasse, deren Methoden morgentraenkung, mittagstraenkung und abendtraenkung die gesamte Kuhpflege erledigen und (soweit Sie beurteilen können) nicht mit einer Ausnahme abstürzen. (7-16 Programmzeilen)