Lösung der Nachklausur Prg12 im WS'06/'07

Aufgabe 1

class BuchstabenmengeErw extends Buchstabenmenge {
   int anzahl(char[] buchstaben) {
     int anzahl = 0;
     for (int i = 0; i < buchstaben.length; i++)
        if (inhalt[buchstaben[i] – 'a'])
           anzahl++;
     return anzahl; }}

Aufgabe 2


Aufgabe 3

public class ZweiObjekte { 
   private Eimer eimer = new Eimer();
   private Kreis kreis = new Kreis();
   public EimerUndKreis() { 
     eimer.anzeigen(); kreis.zeichnen();} 
   public void blau() { 
     try {
        eimer.fuellen(); kreis.bemalen(Farbe.BLAU); 
     } catch (VollAusnahme a) {
        System.out.println("Voll"); } } 
   public void weiss() { 
     try { 
        eimer.entleeren(); kreis.verstecken(); kreis.zeichnen(); 
     } catch (LeerAusnahme a) {
        System.out.println("Leer"); } } }

Aufgabe 4

(X)       Falsch             Ein Objekt der Klasse StringBuffer kann nicht verändert werden.
Grund: Die Klasse StringBuffer besitzt Mutatoren (im Gegensatz zu String).

(X)       Richtig            Es gibt Operatoren mit einem, zwei und mit drei Operanden.
Grund: unäre (wie die Negation ! ), binäre (wie die Addition + ), tertiäre(wie der Bedingungsoperator ?: )

(X)       Falsch             Der Aufruf einer Funktion wie einer Prozedur ist immer wirkungslos.
Grund: Meistens schon, aber die Funktion kann eine globale Variable verändern (obwohl sie es nicht sollte)

(X)       Falsch             Konstruktore und Destruktore werden nicht vererbt.
Grund: Konstruktore werden nicht vererbt, Destruktore (die normale Methode finalize) werden vererbt.

(X)       Richtig            Eine leere Klasse kann mehrere Schnittstellen implementieren.
Grund: wenn sie abstrakt ist oder wenn die Schnittstellen leer sind

(X)       Richtig            Eine final Referenz kann nicht verändert (verbogen) werden,
Grund: final ist die Eigenschaft der Variable, const ist die Eigenschaft des Objekts.

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

Grund: Die Laufvariable wird im Rumpf verändert.
(X  )     Richtig            Referenzen können vom Schnittstellentyp sein, Objekte nicht.

Grund: Schnittstellen sind unfertige Klassen und deshalb können sie nicht ausgeprägt werden.


Aufgabe 5.

public class KorrigierterStall() extends Stall {
   public KorrigierterStall() { // Objekte müssen erzeugt werden
     winza = new Eimer(), rekel = new Eimer(), vivi = new Eimer(); }
   public morgentraenkung() throws VollAusnahme, LeerAusnahme {
     super.morgentraenkung(); winza.entleeren(); rekel.entleeren (); }
   public mittagstraenkung() throws VollAusnahme() {
     super.mittagstraenkung(); vivi.entleeren(); rekel.entleeren (); }
   public abendtraenkung() throws VollAusnahme() {
     super.abendtraenkung(); vivi.entleeren (); winza.entleeren (); }
   // Eimer müssen entleert werden