0 Daumen
718 Aufrufe

Aufgabe:

Implementieren Sie das Sortieren in der Methode public void sortieren().


Ansatz/Problem:

Ich soll die Methode Sortieren implementieren. Ich habe schon angefangen (siehe Code), aber ich komme nicht weiter. Bitte mit Erklärung, damit ich es nachvollziehen kann.

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){

  Spieler neuerSpieler = new Spieler(pName, pHandicap);
  anwaerter.enqueue(neuerSpieler);

}

public void zurRanglisteHinzufuegen()
{
  if(!anwaerter.isEmpty()){//mind. 1 Anwaerter muss vorhanden sein
  Spieler neuerSpieler = anwaerter.front();// zwischengespeichert
  anwaerter.dequeue();// anwaerter gelöscht-von Waeteliste entfernt
  rangliste.append(neuerSpieler);

}
}

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<>();//neue Warteliste
String ergebnis="";
while (!anwaerter.isEmpty()) {//nicht leer  
  Spieler aktSpieler = anwaerter.front();//Zwischengespeichert
  temp.enqueue(aktSpieler);//der neuen Liste hinzugefügt
  anwaerter.dequeue();//anwaerter gelöscht-entfernt
  ergebnis = ergebnis + aktSpieler.getName() + "\n";   
}
anwaerter = temp;
return ergebnis;
}

public void spielerEntfernen(String pName){
  rangliste.toFirst();
  Spieler aktSpieler;
  while (rangliste.hasAccess()){
      aktSpieler = rangliste.getContent();
   
      if (aktSpieler.getName().equals(pName)){
       
          rangliste.remove();
          return;
        }
        rangliste.next();
    }
}

public void handicapAendern(String pSpieler, int pNeuesHandicap){
    rangliste.toFirst();
    Spieler aktSpieler;
 
    while (rangliste.hasAccess()){
        aktSpieler= rangliste.getContent();
        aktSpieler.setHandicap(pNeuesHandicap);
        return;
    }
    //anwaerter = temp;
    //return ergebnis;
}

public void sortieren(){
List neueListe = new List();
Spieler aktSpieler ;
Spieler besterSpieler;
Avatar von

Wonach soll sortiert werden?
Welche Sortieralgorithmen kennst du?
Darfst du vorgefertige Sortiermethoden benutzen oder Datenstrukturen, die automatisch sortieren?

Also die aufgabe ist einen Algorithmus zur Sortierung von Golfspielern in der Spielerrangliste zu programmieren. Die Schritte sind: 1. Den besten Spieler aus der alten Liste heraussuchen

2. Diesen Spieler in eine neue Liste anfügen.

3. Den Spieler aus der alten Liste löschen. Die Schritte 1 bis 3 wiederholt man bis die alte Liste leer ist.

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Lösung für die Implementierung der Sortiermethode

Zur Vollendung der Implementierung der sortieren() Methode in Ihrer Klasse Spielerrangliste könnten wir einen einfachen Sortieralgorithmus verwenden. In diesem Fall scheint ein einfaches Auswahl- oder Insertionsort ausreichend zu sein, da die Größe der Rangliste wahrscheinlich nicht sehr groß ist. Für ein besseres Verständnis und Einfachheit werden wir das Insertion Sort Verfahren verwenden.

Beim Insertion Sort durchläuft man die Liste von dem zweiten Element bis zum letzten. Jedes durchlaufene Element wird mit den davorliegenden Elementen verglichen und in die korrekte Position verschoben, so dass am Ende die Liste sortiert ist. Dieser Prozess ähnelt dem Sortieren von Spielkarten in den Händen.

Da Sie in Ihrer Frage nicht den vollständigen Spieler Klassencode angegeben haben, gehe ich davon aus, dass die Klasse Spieler zwei Methoden enthält: getName() für den Namen des Spielers und getHandicap() für die Punktzahl des Spielers, nach der wir sortieren wollen.

Implementierung der sortieren() Methode

Um die sortieren() Methode zu implementieren, fügen Sie den folgenden Code in Ihre Spielerrangliste Klasse ein:

java
public void sortieren() {
    // Sortieren der rangliste mittels Insertion Sort
    if (rangliste.size() <= 1) return; // Wenn die Liste 0 oder 1 Element hat, ist sie bereits sortiert.
    
    rangliste.toFirst(); 
    while (rangliste.hasAccess()) { 
        Spieler aktuellerSpieler = rangliste.getContent();
        rangliste.remove(); // Entfernen des aktuellen Spielers, um ihn einzusortieren
        if (rangliste.hasAccess()) {
            rangliste.toFirst(); 
            boolean eingefuegt = false;
            while (rangliste.hasAccess() && !eingefuegt) {
                Spieler vergleichsSpieler = rangliste.getContent();
                if (aktuellerSpieler.getHandicap() < vergleichsSpieler.getHandicap()) {
                    rangliste.insert(aktuellerSpieler);
                    eingefuegt = true;
                } else {
                    rangliste.next();
                }
            }
            if (!eingefuegt) {
                rangliste.append(aktuellerSpieler); // Am Ende einfügen, wenn nicht schon eingesetzt
            }
        } else {
            rangliste.append(aktuellerSpieler); // Wenn die Liste leer ist, einfach am Ende einfügen.
        }
        rangliste.toFirst();
        while (rangliste.hasAccess() && rangliste.getContent() != aktuellerSpieler) {
            rangliste.next(); // Setze den Cursor zurück auf den ursprünglichen Standort des aktuell verschobenen Spielers
        }
        rangliste.next(); // Zum nächsten Spieler bewegen, der sortiert werden soll.
    } 
}


Hinweis:
1. Diese Implementierung geht davon aus, dass die Methoden toFirst(), next(), getContent(), insert(), append(), und remove() wie erwartet funktionieren und das Interface bzw. die Methoden für die Liste richtig implementiert sind.
2. Das Attribut size für die Methode size() ist konzeptionell und soll die Anzahl der Elemente in Ihrer Liste rangliste repräsentieren. Stellen Sie sicher, dass Sie eine solche Funktionalität implementiert haben oder passen Sie diesen Teil des Codes an, um die Größe Ihrer Liste zu bestimmen.
3. Die Bedingung if (rangliste.size() <= 1) return; verhindert die Ausführung der Sortierung, wenn es nichts zu sortieren gibt.

Mit dieser Methode durchläuft Ihre sortieren() Funktion die Liste der Spieler in rangliste, vergleicht jedes Element mit seinen Vorgängern und fügt es an der richtigen Position ein, um eine aufsteigende Sortierung nach dem Handicap der Spieler zu erreichen.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community