Klausur PR12 im WS'05/'06

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

class ZeichenmengeImpl { protected boolean[] inhalt = new boolean[256]; // nur ASCII
   public void eintragen(char zeichen) { inhalt[zeichen] = true; }
   public void enfernen(char zeichen) { inhalt[zeichen] = false; }
   public boolean vorhanden(char zeichen) { return inhalt[zeichen]; } }

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

int anzahl(char zeichen); // Anzahl der vorhandenen zeichen in der Menge
int anzahl(); // Gesamtzahl aller Zeichen in der Menge

Aufgabe 2: Zeichnen Sie die Objektstruktur (alle Variablen, Objekte und Werte) nach der folgenden Programmzeile in der main-Methode (ca. 10 Strukturelemente):

DreiEimer r1 = new DreiEimer(), r2 = new DreiEimer();

wenn die folgenden Klassenvereinbarungen bestehen:

class ZweiEimer { protected static int zaehler = 0;
   protected Eimer links = new Eimer(), rechts = new Eimer(); }
class DreiEimer extends ZweiEimer { protected static boolean linksGewählt = true;
   protected Eimer mitte = linksGewählt ? links : rechts; }

Stellen Sie dar, welche Strukturelemente (Variablen, Objekte) in welchem Speicherbereich (Stapel/stack, Halde/heap, Klasse/static-Bereich) liegen. Mit ? : wurde ein „bedingter Ausdruck“ programmiert.


Aufgabe 3: Programmieren Sie eine Fensterklasse, das beim Schließen piepst. Sie brauchen dazu folgende Klassen und Methoden (ca. 5 Programmzeilen):

package java.awt;
public class Frame {
   void addWindowListener(java.awt.event.WindowListener lauscher); … }
interface WindowListener { void windowClosing(java.awt.event.WindowEvent e); … }

Folgender Methodenaufruf bewirkt einen Piepton:

java.awt.Toolkit.getDefaultToolkit().beep();

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            Globale Variablen heißen global, weil sie aus dem ganzen Programm erreichbar sind.
(     )     Falsch

Grund:                                                                                                                                                                                                        

(     )     Richtig            Eine static-Variable kann nur innerhalb der Klasse benutzt werden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Ein Objekt kann gleichzeitig von zwei Referenzen referenziert werden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            javadoc erzeugt die Dokumentation aus dem Bytecode.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Wenn die Anzahl der Wiederholungen erst zur Laufzeit berechnet wird,
(     )     Falsch             kann keine Zählschleife verwedet werden.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Zwischen char und short kann implizit hin- und zurückkonvertiert werden,
(     )     Falsch             da beide 16 Bits lang sind.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Die kurzgeschlossenen Operatoren && und || berechnen ggf. nur ihren linken Operanden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Die Schnittstelle Comparable enthält nur eine parameterlose Methode.
(     )     Falsch            

Grund:                                                                                                                                                                                                        


Aufgabe 5: Die folgende Klasse Ampel bedient drei Kreise:

import lehrbuch.Kreis;
public class Ampel {
   private Kreis rot, gelb, grün; int zustand;
   public Ampel() {
     rot = new Kreis(); rot.zeichnen(); rot.bemalen(Kreis.ROT);
     gelb = new Kreis(); gelb.zeichnen(); 
        gelb.bemalen(Kreis.BLAU); gelb.verstecken();
     grün = new Kreis(); grün.zeichnen(); 
        grün.bemalen(Kreis.GRUEN); grün.verstecken();
     zustand = 0; } …

Programmieren Sie die Methode schalten() dieser Klasse. Der (wiederholte) Aufruf dieser Methode versetzt die Ampel in ihren nächsten Zustand: Zuerst wird Rot angezeigt (Methode Kreis.wiederherstellen); der nächste Aufruf soll auf Rot-Gelb schalten; der nächste auf Grün; der nächste auf Gelb, danach wieder Rot und es fängt alles von vorne an. Benutzen Sie die globale Variable zustand, um den Zustand der Ampel (zyklisch) zu speichern. (7-16 Programmzeilen)