Klausur-02-09
Aus Tudwiki
Lösung für die Java-Aufgabe ( 3a) ), siehe dazu auch den Thread im H'n'H. -> http://tud.hicknhack.org/forum/messages?topic=121653
import java.util.*; public class Bibliothek { private List bestand; public Bibliothek() { bestand = new LinkedList(); } public void einfuegen(Buch buch) { bestand.add(buch); } public Predicate createSuchmuster(String name) { if (name.equals("startsWith")) return new PredicateStartsWith(); else if (name.equals("endsWith")) return new PredicateEndsWith(); else if (name.equals("length")) return new PredicateLength(); else throw new UnsupportedOperationException(); } public List suchen(Predicate pred, Object argument) { List templist,templist2; templist = new LinkedList(); templist2 = new LinkedList(); Iterator bestandsiterator,titeliterator,prediter; bestandsiterator = bestand.iterator(); while (bestandsiterator.hasNext()) { templist2.add(((Buch)bestandsiterator.next()).getTitel()); } titeliterator=templist2.iterator(); prediter = new PredicateIterator(titeliterator,pred,argument); while (prediter.hasNext()) { templist.add(((Buch)prediter.next()).getTitel()); } return templist; } } public class PredicateIterator implements Iterator { private Iterator iter; private Predicate pred; private Object argument; public PredicateIterator (Iterator iter, Predicate pred, Object argument) { this.iter=iter; this.pred=pred; this.argument=argument; } public boolean hasNext(){ //testweise auf einem temporären Iterator durchiterieren, bis was Brauchbares kommt Object tempobject; Iterator tempiter; tempiter=iter; while (tempiter.hasNext()) {//ist was zum Iterieren da tempobject=tempiter.next(); if (pred.predicate(tempobject,argument)) {//aha da ist doch ein brauchbares Objekt, also kanns noch lustig weitergehen return true; } } //nix gefunden also false zurück return false; } public Object next(){ //erstmal überprüfen, ob überhaupt noch was da ist! Object tempobject; while (iter.hasNext()) {//ist was zum Iterieren da tempobject=iter.next(); if (pred.predicate(tempobject,argument)) {//aha da ist doch ein brauchbares Objekt, also zurückgeben return tempobject; } } //nix gefunden also false zurück return null; } public void remove() { throw new UnsupportedOperationException(); } } public class Buch { private String titel; public Buch(String titel) { this.titel=titel; } public String getTitel() { return titel; } } public interface Predicate { boolean predicate (Object element, Object argument); } public class PredicateStartsWith implements Predicate { public boolean predicate (Object element, Object argument) { String hilfe,vergleich; try { hilfe=(String) argument; vergleich=(String) element; return vergleich.startsWith(hilfe); } catch (Exception e) { throw new RuntimeException(); } } } public class PredicateLength implements Predicate { public boolean predicate (Object element, Object length) { String vergleich; long hilfe; try { hilfe=(Integer)length; vergleich=(String) element; return vergleich.length()==hilfe; } catch (Exception e) { throw new RuntimeException(); } } } public class PredicateEndsWith implements Predicate { public boolean predicate (Object element, Object string) { String hilfe,vergleich; try { hilfe=(String) string; vergleich=(String) element; return vergleich.startsWith(hilfe); } catch (Exception e) { throw new RuntimeException(); } } }