Lösung der Klausur Pr22 SS'07


Aufgabe 1.

Element familieElement = dom.getDocumentElement(); // "familie"
NodeList personListe = familieElement.getElementsByTagName("person");
Person[] personReihung = new Person[personListe.getLength()]; 
// NodeList ist leider (noch) nicht Iterable, deswegen klassische Zählschleife:
for (int i = 0; i < personListe.getLength(); i++) // person-Elemente von der Liste in die Reihung übertragen
   personReihung[i] = new Person((Element)personListe.item(i)); // item() liefert Node, Person-Konstruktor braucht Element
shellSort(personReihung); // personReihung ist Untertyp von Comparable[]
for (Person p : personReihung) // person-Elemente in neuer Reihenfolge ins DOM einhängen
	familieElement.appendChild(p.person); // ein im selben DOM vorhandenes Element wird von appendChild "umgehängt" (aus- und neu eingehängt)

Aufgabe 2.

void alleEntfernen(Element e) {
   if (anker != null) { // nur wenn nicht leer
     Knoten k = anker;
     while (k.verbindung != null) { // jeweils den vorwärts liegenden Knoten untersuchen
        if (k.verbindung.wert == e)
           k.verbindung = k.verbindung.verbindung;
        k = k.verbindung; } // weiterschalten
     if (anker.wert == e) // den ersten Knoten untersuchen
        anker = anker.verbindung; } }

Aufgabe 3.

(X) Falsch                   In einem generischen Multibehälter sind immer alle Elemente vom selben Typ.
Grund: Sie können Untertyp des aktuellen generischen Parameters sein (Aufwärtskompatibilität/Polymorphie).

(X) Richtig                   Aus Referenzgleichheit folgt Objektgleichheit.
Grund: Ein Objekt ist mit sich selbst gleich.

(X) Falsch                   Im MVC-Konzept benachrichtigt Model die View-Klasse bei Veränderung von Daten.
Grund: Model kennt weder View noch Control. Control benachrichtigt über Veränderungen

(X) Richtig                   Filterströme haben keinen parameterlosen Konstruktor.
Grund: Sie reichen die gefilterten Daten an den Strom weiter, den sie als Konstruktorparameter erhalten haben.

(X) Falsch                   In einem DTD kann definiert werden, wie XML-Daten dargestellt werden.
Grund: DTD definiert die Struktur, CSS oder XSL die Darstellung der XML-Daten

(X) Richtig                   Nebenläufige Prozesse in Java können ohne die Klasse Thread nicht programmiert werden.
Grund: Sie muss entweder erweitert oder (mit einem Runnable-Parameter) ausgeprägt werden.

(X) Falsch                   In einem Objekt der Klasse java.util.Stack kann immer nur das zuletzt eingetragene Element gelesen werden.
Grund: Stack erweitert Vector, der Zugriff auf alle Elemente erlaubt; außerdem findet die Methode search ältere Elemente

(X) Falsch                   Shell-Sort ist immer schneller als Bubble-Sort.
Grund: Nur bei großen Datenmengen. Bei schon sortierten Daten ist Bubble-Sort schneller.


Aufgabe 4:


Aufgabe 5:

public void eintragen(final Element element) {
   anzahl++;
   if (anzahl < inhalt.length)
     juengstes = (juengstes + 1) % inhalt.length; 
   else {
     Element[] temp = (Element [])new Object[2*inhalt.length];
     for (int i = 0; i < anzahl; i++)
        temp[i] = inhalt[(aeltestes + i) % inhalt.length];
     inhalt = temp;
     aeltestes = 0;
     juengstes = anzahl; }
   inhalt[juengstes] = element; }