Lösung der Klausur PR11 im WS99/00

Aufgabe 1

public class ZweiFahrstuehle {
	private static Fahrstuhl liftLinks = new Fahrstuhl(), liftRechts = new Fahrstuhl();
	public static void tuerOeffnenLinks() {
		try {
			liftLinks.tuerOeffnen();
		}
		catch (TuerAusn a) { // Tür schon offen
		}
	}
	public static void aufwaertsLinks() {
		try {
			liftLinks.aufwaerts();
		}
		catch (RichtungsAusn a) { // Lift schon oben
		}
	}
	... // weitere Methoden ähnlich
	public static void main(String[] args) {
		tuerSchliessenLinks();
		aufwaertsRechts();
	}
}

Aufgabe 2

public class Fahrstuhlsteuerung extends FahrstuhlMenueAufg {
	private Fahrstuhl lift = new Fahrstuhl();
	protected void tuerAuf() {
		try {
			lift.tuerOeffnen();
		} catch (TuerAusn a) {
			System.out.println("Tür schon offen");
		}
	}
	protected void tuerZu() { ... // ähnlich
	}
	protected void hochfahren() {
		try {
			lift.aufwaerts();
		} catch (RichtungsAusn a) {
			System.out.println("Lift schon oben");
		}
	}
	protected void hinunterfahren() { ... // ähnlich
	}
}

Aufgabe 3

( X ) Falsch Die folgende Zählschleife wird 100 mal ausgeführt: for (int zaehler=0; zaehler<100; zaehler--) anweisung;
Grund: Endlosschleife: zaehler läuft von 0 nach unten (wegen --), bleibt für immer < 100

( X ) Falsch Die Zuweisung Klasse1 ref = new Klasse2(); ist nur dann zulässig, wenn Klasse2 eine Oberklasse von Klasse1 ist.
Grund: umgekehrt

( X ) Richtig Der Ausdruck 3*(4.0f / 17) liefert einen Wert vom Typ float.
Grund: wegen f

( X ) Falsch Eine Klasse besitzt nur dann einen Konstruktor, wenn er explizit in der Klasse definiert ist.
Grund: Parameterloser Konstruktor ist implizit immer vorhanden

( X ) Falsch Ein private-Konstruktor verhindert, dass die Klasse ausgeprägt wird.
Grund: In der Klasse selbst möglich; außerdem können weitere öffentliche Konstruktore vorhanden sein

( X ) Richtig Die Anweisung Object ob1 = new Integer(4); ist zulässig; die Anweisung Object ob2 = 4; ist unzulässig
Grund: die erste wegen Aufwärtskompatibilität; die zweite wegen Typfehler (Referenz != int)

( X ) Richtig Die Ausführung der start()-Methode eines Applets erfolgt über einen polymorphen Aufruf.
Grund: der appletviewer ruft sie über eine Referenz vom Typ java.applet.Applet auf

( X ) Richtig Es gibt Klassen, die ohne den Aufruf einer ihrer Methoden etwas tun.
Grund: z.B. HalloWelt (nur der Konstruktor wird aufgerufen)


Aufgabe 4

abstract public class Wortleser implements Scanner {
	private Eingabestrom eingabe = new Eingabestrom();
	private char aktuellesZeichen;
	public boolean leerzeichen() {
		return aktuellesZeichen == ' ';
	}
	public void naechstesZeichen() throws DateiendeAusn {
		aktuellesZeichen = eingabe.zeichenEinlesen();
	}
	public void leerzeichenUeberlesen() throws DateiendeAusn {
		while (leerzeichen())
			naechstesZeichen();
	}
}