Klausur-02-09

Aus Tudwiki
Wechseln zu: Navigation, Suche

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();
	       }
	   }
}