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

Aufgabe 1:

public class KundeA implements Ausgabe {
   public void ausgabe() { System.out.println("Ausgabe"); } }
public class KundeB implements Ausgabe {
   public void ausgabe() { lehrbuch.Programm.meldung("Ausgabe"); } }
public static void main(String[] args) {
   programm(new KundeA()); programm(new KundeB()); }

Aufgabe 2.


Aufgabe 3

public class SpezialKnopf extends java.awt.Button {
   public SpezialKnopf() { super(); // kann weggelassen werden
     this.addActionListener(
        new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent e) {
             System.out.println("Gedrückt"); }});}
     SpezialKnopf knopf = new SpezialKnopf();
     knopf.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
           java.awt.Toolkit.getDefaultToolkit().beep(); }   });

Aufgabe 4.           

(X  )     Richtig            Ein String-Objekt kann nicht verändert werden.
(     )     Falsch

Grund: Die Klasse String hat keine Mutatoren.

(     )     Richtig            println() ist eine Methode der Klasse System
(X  )     Falsch            

Grund: In System.out.println()ist out eine Variable in System; println ist eine Methode der Klasse von out.

(X  )     Richtig            Eine anonyme Klasse kann nur einmal ausgeprägt werden.
(     )     Falsch            

Grund: new Oberklasse { … } – hat keinen Namen für eine zweite Ausprägung

(     )     Richtig            Ein String kann keine Anführungszeichen enthalten,
(X  )     Falsch             weil das zweite Anführungszeichen das Ende des String-Literals bedeutet.

Grund: mit Sonderliteral \"

(     )     Richtig            Wenn die Anzahl der Wiederholungen von Benutzereingaben abhängt,
(X  )     Falsch             kann keine Zählschleife verwendet werden.

Grund: doch, wenn die Benutzereingabe vor der Schleife stattfinden

(     )     Richtig            1.2 ist ein float-Literal.
(X  )     Falsch            

Grund: double; 1.2f ist ein float-Literal.

(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            In Java gilt immer: Objekte werden durch Methoden, primitive Werte durch Operatoren manipuliert.
(X  )     Falsch            

Grund: Ausnahme: Konkatenation + der Klasse String.


Aufgabe 5.

private static int[] reste(int[]dividenden, int[] divisoren) {
   // requires dividenden.length == divisoren.length &&
   // alle divisoren != 0
   int[] ergebnis = new int[dividenden.length];
   for (int i = 0; i < ergebnis.length; i++)
     ergebnis[i] = dividenden[i] % divisoren[i];
   return ergebnis; }