0 Daumen
638 Aufrufe

Infos:

Die Mitglieder werden in der Reihenfolge ihrer Fähigkeiten aufgelistet. Die Spielstärke eines Golfspielers wird in Form seines Handicaps angegeben. Je niedriger das Handicap desto stärker der Spieler.Um in die Rangliste aufgenommen zu werden, muss man zunächst ein Aufnahmeverfahren durchlaufen. Hierzu wird man zunächst auf eine Warteliste gesetzt. Jede Woche wird der erste Anwärter der Warteliste geprüft. Dann entscheidet der Vorstand, ob der Spieler in den Club, und damit in die Rangliste, aufgenommen wird, von der Warteliste gestrichen wird.


Aufgabe:

Implementieren Sie die Methode neuerAnwaerter so, dass ein neuer Spieler mit den in die zugehörigen Textfelder eingetragenen Daten in die Warteliste aufgenommen wird.

Bitte mit Erklärung, damit ich es nachvollziehen kann. Ich habe es wirklich versucht, komme jedoch auf kein Resultat. Ich denke es hat was mit der Methode enqueue zu tun, aber wie setze ich es nun um?

Wie genau kann ich den Anwärter implementieren?



Code:

public class Spielerrangliste{
private List<Spieler> rangliste;
private Queue<Spieler> anwaerter;

public Spielerrangliste(){
rangliste = new List<>();
anwaerter = new Queue<>();   
dummySpielerEinfuegen();
}

public void dummySpielerEinfuegen(){
Spieler s1 = new Spieler("Fuerstin Pueckler",200);
Spieler s2 = new Spieler("General Wolfenstein",250);
Spieler s3 = new Spieler("Prof. Dr. Schlunz",600);
rangliste.append(s1);// Ranglste hängt S1 an
rangliste.append(s2);// ""S2
rangliste.append(s3);//""S3
Spieler s4 = new Spieler("Norbert Neumann", 700);
anwaerter.enqueue(s4);   
Spieler s5 = new Spieler("Natascha Nocheine", 750);
anwaerter.enqueue(s5);
}
public void neuerAnwaerter(String pName, int pHandicap){
//To Do: Hier muss der Quelltext implementiert werden, der den neuen Anwaerter in die Warteliste einfaegt
}

public String listeToString(){
rangliste.toFirst();
String ergebnis = "";
while (rangliste.hasAccess()) {
  Spieler aktSpieler = rangliste.getContent();
  ergebnis = ergebnis + aktSpieler.getName() + " : " + aktSpieler.getHandicap() + "\n";
  rangliste.next();
}
return ergebnis;
}
public String anwaerterToString(){
Queue<Spieler> temp = new Queue<>();
String ergebnis="";
while (!anwaerter.isEmpty()) {     
  Spieler aktSpieler = anwaerter.front();
  temp.enqueue(aktSpieler);
  anwaerter.dequeue();
  ergebnis = ergebnis + aktSpieler.getName() + "\n";     
}
anwaerter = temp;
return ergebnis;
}
}
Avatar von

1 Antwort

+1 Daumen

Du kannst die Lösung aus den Dummy Daten die in der Methode dummySpielerEinfuegen() erstellt werden ableiten.

public void dummySpielerEinfuegen(){
...
Spieler s4 = new Spieler("Norbert Neumann", 700);
anwaerter.enqueue(s4); 
...
}

Es wird zuerst ein neuer Spieler mit Spieler s = new Spieler(Name des Spielers, Handicap); dieser wird dann mit anwaerter.enqueue(s); in die Warteschlange der Anwärter eingereiht.

Die Warteschlange ist oben in der Klasse deklariert: private Queue<Spieler> anwaerter;

"Name des Spielers" musst du nun nur noch mit dem Parameter "pName" der Methode ersetzen und "Handicap" mit "pHandicap".


Code:

public void neuerAnwaerter(String pName, int pHandicap){
Spieler neuerSpieler = new Spieler(pName, pHandicap);
anwaerter.enqueue(neuerSpieler);
}
Avatar von

Vielen Dank!


Sehr gut, ich habe es verstanden!

Kein Problem :)

Also, ich sollte jetzt noch

die Methode zurRanglisteHinzufuegen

Implementieren.

Ich habe es so gelöst. Ist das richtig?



Meine Bearbeitung:

public void zurRanglisteHinzufuegen (String pName, int pHandicap)
{
Spieler neuerSpieler = new Spieler( String pName, int pHandicap);
rangliste .append(neuerSpieler);
}

Die Methode ist fast richtig.

Entscheidend ist:

Jede Woche wird der erste Anwärter der Warteliste geprüft. Dann entscheidet der Vorstand, ob der Spieler in den Club, und damit in die Rangliste, aufgenommen wird, von der Warteliste gestrichen wird.

Für das hinzufügen in die Rangliste muss der Spieler aus der Warteliste geholt werden und nicht der Methode per Parameter übergeben werden.
Das geht mit anwaerter.dequeue();

Code:

public void zurRanglisteHinzufuegen () {
Spieler neuerSpieler = anwaerter.dequeue();
rangliste.append(neuerSpieler);
}

Das stimmte nicht ganz.

Mit anwaerter.dequeue(); wird der Anwärter nur entfernt, er wird aber nicht zurück gegeben. Er muss erst mit anwaerter.front(); zwischengespeichert werden. (siehe anwaerterToString() Methode)


Code:

public void zurRanglisteHinzufuegen () {
if (!anwaerter.isEmpty()) { // nur wenn auch min. ein Anwärter in der Warteliste ist
Spieler neuerSpieler = anwaerter.front();
anwaerter.dequeue();
rangliste.append(neuerSpieler);
}
}


Vielen Dank: )

Eine sehr hilfsbereite Person sind Sie:)

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community