rendered paste bodypublic 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<Reiter> registrierteReiter;
Hashtable<ReiterWettkampf,Teilnahme> teilnahmen;
Registrierstelle() {
registrierteReiter=new HashSet<Reiter>();
teilnahmen=new Hashtable<ReiterWettkampf,Teilnahme>();
}
/**
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);
}
}