===== Lösungsversuch =====
==== Aufgabe 1 - Wissensfragen ====
(unsicher) \\
a) 2 und 3 (bei Attributen immer nach statischem Typ) \\
b) 1 und 3\\
c) 1 und 4\\
==== Aufgabe 2 - Rekursion ====
import java.util.ArrayList;
import java.util.List;
class Ware {
final String bezeichnung;
final long preis;
Ware(String b, long p) {
this.bezeichnung = b;
this.preis = p;
}
}
public class Christkindlesmarkt {
List> alle(List waren, long geld) {
List> llw = new ArrayList<>();
for (Ware w : waren) {
if (w.preis == geld) {
List oneProduct = new ArrayList<>();
oneProduct.add(w);
llw.add(oneProduct);
} else if(w.preis> geld){
//nichts machen, zu wenig geld
} else{
List> listRek = alle(waren, geld - w.preis);
//w noch hinzufuegen
for (List l : listRek) {
l.add(w);
}
llw.addAll(listRek);
}
}
return llw;
}
}
==== Aufgabe 3 - Bäume ====
public class Trie {
// bis zu 26 Kinder; null, wenn kein Kind mit zugehoerigem Buchstaben:
Trie[] kind = new Trie[’Z’ - ’A’ + 1];
String wort; // null, wenn keine Zeichenkette zu speichern ist
void einfuegen(String s) {
Trie akt = this;
for (char c : s.toCharArray()) {
if (c < ’A’ || c > ’Z’) {
throw new IllegalArgumentException();
}
int zeiger = c - 'A';
if(akt.kind[zeiger] == null){
akt.kind[zeiger] = new Trie();
}
akt = kind[zeiger]
}
akt.wert = s;
}
void ausgeben() { // lexikographisch aufsteigend sortiert!
if(this.wort != null){
System.out.println(this.wort);
}
for(Trie t : this.kind){
if(t != null){
t.ausgeben();
}
}
}
==== Aufgabe 4 - ADT ====
isX(PlayX(t, g), f) :≡ f = g ∧ !isO(t,f) V isX(t,f)
isX(PlayO(t, g), f) :≡ isX(t,f)
tie(t) :≡ all(t) ∧ !winsX(t) ∧ !winsY(t)