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 Stichworten (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)