Lösung der Klausur PR21 SS'99


Aufgabe 1

public class Tore {
	private Tor[] t;
	public Tore(int anzahl) { t = new Tor[]anzahl;
		for (int i = 0; i < anzahl; i++) t[i] = new Tor();
	}
	public void schliessen(int i) throws GeschlossenAusn { t[i].schliessen(); }
	public void oeffnen(int i) throws GeoeffnetAusn { t[i].oeffnen(); }
	public boolean geoeffnet(int i) { return t[i].geoeffnet(); }
}

Aufgabe 2

public class Programm { final int l1 = 5, l2 = 312;
	private static Tore t1 = new Tore(l1), t2 = new Tore(l2);
	private static void prozedur(Tore t, int i) throws GeoffnetAusn {
		try { t.schliessen(i); t.oeffnen(i); }
		catch (GeschlossenAusn ausnahme) { System.err.println ("Ausnahme in prozedur"); }
	}
	public static void main(String[] args) {
		try {
			for (int i = 0; i < l1; i++) prozedur(t1, i);
			for (int i = 0; i < l2; i++) prozedur(t2, i);
		} catch (GeoeffnetAusn ausnahme) { System.err.println ("Tor geöffnet");
	}
}

Aufgabe 3


Aufgabe 4

· Die Ausführung einer actionPerformed-Methode erfolgt über einen polymorphen Aufruf. richtig

Grund: Der Interpreter ruft actionPerformed für eine Referenz vom Typ java.awt.event.ActionListener auf

· Ein Konstruktor kann alle Methoden der aktuellen Klasse und ihrer Oberklasse aufrufen. richtig

Grund: mit this oder super (wie jede andere Methode)

· Die Anzahl der Elemente in der Reihung-Implementierung kann nach der Erzeugung nicht verändert werden. richtig

Grund: Das Reihungsobjekt wird im Konstruktor erzeugt.

Bemerkung: Gegebenfalls kann später ein neues Reihungsobjekt erzeugt und der Inhalt hinüberkopiert werden.

· Weil die Knoten einer Liste rekursiv sind, müssen alle Methoden, die die Liste durchlaufen, rekursiv sein. falsch

Grund: mit while-Schleife auch möglich

· Man kann alle Elemente einer verketteten Liste mit einer for-Schleife (Zählschleife) erreichen. richtig

Grund: aber nur wenn im Objekt die Länge der Liste (die Anzahl der Elemente) gespeichert wird

· Eine Referenz kann sowohl durch eine Zuweisung wie auch durch Aufruf eines Mutators verändert werden. falsch

Grund: Der Aufruf eines Mutators verändert die Referenz nicht, nur das von ihr referierte Objekt

· Um eine Datei beschreiben oder daraus lesen zu können, muß man ein Objekt der Klasse java.io.File erzeugen. r/f

Grund: richtig: Das entsprechende IOStream-Objekt muß mit einem File-Objekt (durch den Konstruktorparameter) verbunden werden; falsch: Der Parameter kann auch der Dateiname (String) sein, so daß das erforderliche File-Objekt implizit erzeugt wird.

· Zwei String-Objekte können dieselbe Zeichenkette enthalten, auch wenn z1 == z2 false liefert. richtig

Grund: Es gibt unterschiedliche Objekte (!=) mit gleichem Inhalt (equals)


Aufgabe 5

	private boolean gleich(final WarteschlangePol w) { // const
		if (anzahl != w.anzahl) return false;
		int a = aeltestes; int b = w.aeltestes;
		for (int i = 0; i < anzahl; i++) {
			if (! inhalt[a].equals(w.inhalt[b])) return false;
			a++; a %= inhalt.length; b++; b %= inhalt.length;
		}
		return true;
	}