hi,
Ich bin grade dabei ein paar Aufgaben zulösen. Hab schon ein großen Teil erlädigt. Bekommt bitte keine Angst von der Aufgabenstellung unten.Ist zwar ein bischen viel Text aber naja.
Ich will an ersterstelle einfach nur wissen ob ich meine Aufgabe bis zur b) richtig implementiert hab.
Wie kann ich die c) realisieren.
:```public class TeilnehmerListe implements TNListe {
private ArrayList<Teilnehmer> inhalt;
TeilnehmerListe() {
inhalt = new ArrayList<Teilnehmer>();
}
// Methodenvertrag
/*
* @pre darf undefiniertes verhalten zeigen
*/
@Override
public synchronized boolean einfügen(Teilnehmer tn) {
// Auto-generated method stub
boolean keinDoppelgänger = false;
for (int i = 0; i <= inhalt.size(); i++) {
if (inhalt.get(i).getName().equals(tn)) {
System.out.println("Vorhandener Name");
keinDoppelgänger = false;
} else {
keinDoppelgänger = true;
}
}
if (keinDoppelgänger = true) {
inhalt.add(tn);
return true;
} else {
return false;
}
}
@Override
public synchronized boolean entfernen(Teilnehmer tn) {
// Auto-generated method stub
for (int i = 0; i <= inhalt.size(); i++) {
if (inhalt.get(i).equals(tn)) {
inhalt.remove(i);
return true;
} else {
return false;
}
}
return false;
}
public static void main(String[] agrs) {
}
}
public interface TNListe {
boolean einfügen(Teilnehmer tn);
boolean entfernen(Teilnehmer tn);
}
public class Teilnehmer {
private String name;
private int tele;
public Teilnehmer(String nameP, int teleP) {
this.name = nameP;
this.tele = teleP;
}
public String getName() {
return this.name;
}
public int getTele() {
return this.tele;
}
public void setName(String nameP) {
this.name = nameP;
}
public void setTele(int teleP) {
this.tele = teleP;
}
}```
a) Schreiben Sie eine Klasse Teilnehmer, deren Objekte die privaten Attribute String
name, int Telefonnummer sowie die entsprechenden set/get-Methoden und
geeignete Konstruktoren besitzen.
(b) Schreiben Sie eine Klasse TeilnehmerListe , die folgende Schnittstelle implementiert:
interface TNListe {
boolean einfügen(Teilnehmer tn);
boolean entfernen(Teilnehmer tn);
}
Ein Objekt dieser Klasse soll eine Liste von Objekten der Klasse Teilnehmer
verwalten. Die Klasseninvariante fordert, dass die Liste niemals zwei Teilnehmer mit
gleichen Namen enthalten darf. Ergänzen Sie um entsprechende Konstruktoren.*
(c) Testen Sie diese Klasse, in dem Sie (fast) gleichzeitig zwei Threads, mit Namen
anmelder1 und anmelder2,starten und das folgende „Anmeldespiel“ spielen lassen:
Beide Threads versuchen, Teilnehmer mit den Namen „A“, „B“, …“Z“ in dieselbe Liste tL
der Klasse TeilnehmerListe mit der Methode einfügen(…) einzutragen. Die
Reihenfolge ist nicht vorgeschrieben: So könnte ein Thread bei „A“ beginnen, der andere
bei „Z“ oder aber einfach zufällig mittels Math.random() irgend einen Namen wählen.
Jeder Thread hat genau 52 Versuche, von denen natürlich mindestens 26 Versuche scheitern
müssen. Am Ende hat der Thread gewonnen, der die meisten Teilnehmer anmelden konnte.
(d) Zum Ende des Spiels, also wenn beide Threads alle ihnen zustehenden 52 Anmeldeversuche
ausgeführt haben, geben Sie den Gewinner-Thread und den Endstand (also z.B. 14:12
für anmelder1). Prüfen Sie auch, ob die Klasseninvariante eingehalten wurde, also kein
Name doppelt in tL vorkommt.