Lösung der Klausur Prg12 im WS'07/'08

Aufgabe 1:

public class Mehrzweck extends Frame implements ActionListener {
   private Button knopf = new Button("Eimer");
   private Eimer eimer = new Eimer();
   public Mehrzweck() {
     this.add(knopf);
     knopf.addActionListener(this); }
   public void actionPerformed(ActionEvent e) {
     try { eimer.fuellen();
     } catch (VollAusnahme a) {
        try { eimer.entleeren();
        } catch (LeerAusnahme b) {
           System.out.println("Dürfte nicht kommen"); } } } }

Aufgabe 2.


Aufgabe 3

static class Sin implements Funktion {
   public double funktion(double x) { return Math.sin(x); } }
static class Sqrt implements Funktion {
   public double funktion(double x) { return Math.sqrt(x); } }
public static void main(String[] args) {
   System.out.println ("Integral von Sinus: " + integral (new Sin(), 0, 1));
   System.out.println ("Integral von Sqrt: " + integral (new Sqrt(), 0, 1)); }

Aufgabe 4.           

(   )     Richtig            Die Größe des Reihungsobjekts in einem Vector-Objekt wird bei Bedarf verändert.
(X)     Falsch

Grund: Bei Bedarf wird ein neues Reihungsobjekt erzeugt.

(X)     Richtig            Durch die Anweisung for(print(1); print(2); print(3)) print(4)
(   )     Falsch             werden die Zahlen in der Reihenfolge
1 2 4 3 durch print() ausgegeben.

Grund: Die Weiterschaltung (print(3)) wird erst nach dem Rumpf der for-Schleife ausgeführt.

(X)     Richtig            Der Operator + ist nicht für alle primitive Typen definiert.
(   )     Falsch            

Grund: Nur für arithmetische Typen, nicht für boolean.

(X)     Richtig            Wenn im catch-Block keine throw-Anweisung steht,
(   )     Falsch             erfährt der Benutzer nichts von der Ausnahmesituation.

Grund: Seine Methode läuft weiter.

(X)     Richtig            Die Veränderung an einer Parametervariable bleibt lokal.
(   )     Falsch            

Grund: Variablen werden mit call by value übergeben.

(   )     Richtig            In einer static-Methode kann kein this verwendet werden.
(X)     Falsch            

Grund: Sie wird ohne Objekt aufgerufen.

(X)     Richtig            for (i = 1; i <= 10; i++) meldung("nächste Zahl = " + i);
(   )     Falsch             ist keine Zählschleife (ist nicht garantiert endlich).

Grund: i ist nicht lokal; sie kann z.B. in meldung verändert werden.

(   )     Richtig            Parametervariablen können unter Umständen auf der Halde gespeichert werden.
(X)     Falsch

Grund: Sie sind lokale Variablen und werden immer auf dem Stapel gespeichert.


Aufgabe 5.

static void ziffern(int zahl, char[] ziffern) {
   if (zahl >= 1 && zahl <= 99) {
      ziffern[0] = (char)('0' + zahl % 10); // Einser
      ziffern[1] = (char)('0' + zahl / 10); } // Zehner
   else
     throw new Error("Zahl nicht zwischen 1 und 99"); }