public class Wettkampf { /* Wettkampf identifies itself only with name*/ String name; Wettkampf(String name) { this.name=name; } } import java.lang.*; import java.util.*; public class Teilnahme { private int ergebnis; private int startplatz; private String pferd; Teilnahme(int startplatz,String pferd) { this.startplatz=startplatz; this.pferd=pferd; } public void setzeErgebnis(int ergebnis) { this.ergebnis=ergebnis; } public int gibErgebnis() { return ergebnis; } public int gibStartPlatz() { return startplatz; } public String gibPferd() { return pferd; } } public class Reiter { String name,nachname; int geburtsjahr; Reiter(String name,String nachname,int geburtsjahr) { } } public class Registrierung { Reiter r; Wettkampf w; int startplatz; String pferd; Registrierung(Reiter r,Wettkampf w,int startplatz,String pferd) { this.r=r; this.w=w; this.startplatz=startplatz; this.pferd=pferd; } } import java.util.*; /* normally, we need exactely one Registierstelle */ public class Registrierstelle { private class ReiterWettkampf { ReiterWettkampf(Reiter r,Wettkampf w) { this.r=r; this.w=w; } lock = new Object(); Reiter r; Wettkampf w; } HashSet registrierteReiter; Hashtable teilnahmen; Registrierstelle() { registrierteReiter=new HashSet(); teilnahmen=new Hashtable(); } /** Registriert neuen Reiter, falls der Reiter schon registriert ist passiert nichts */ public synchronized void reiterRegistrieren(Reiter r) { registrierteReiter.add(r); } /** Reiter für einen Wettkampf registrieren, falls null zurückgegeben wurde war der Reiter schon dafür registriert */ public synchronized Teilnahme reiterAnmelden(Registrierung r) { ReiterWettkampf x=new ReiterWettkampf(r.r,r.w); if (teilnahmen.containsKey(x)) return null; Teilnahme t=new Teilnahme(r.startplatz,r.pferd); teilnahmen.put(x,t); return t; } /** Reiter von einem Wettkampf wieder abmelden, Startnummer und Pferd müssen übereinstimmen */ public synchronized void reiterAbmelden(Registrierung r) { ReiterWettkampf x=new ReiterWettkampf(r.r,r.w); if (!teilnahmen.containsKey(x)) return; if (teilnahmen.get(x).gibStartPlatz()==r.startplatz && teilnahmen.get(x).gibPferd().equals(r.pferd)) teilnahmen.remove(x); } }