0 Daumen
489 Aufrufe

Frage:

Ich soll eine Methode implementieren, welche einen bestimmten Spieler aus der Rangliste unbenennen kann. Falls der Spieler nicht in derRangliste ist, soll nichts passieren. Implementieren Sie für die Klasse Spielerrangliste eine Methode umbenennen.

Der Methodenkopf der gesuchten Methode lautet:public void umbenennen (String pName, String pNeuerName)

ich habe natürlich bereits allein versucht etwas zu Implementiere, doch denke ich, dass dies nicht korrekt ist und würde mich sehr auf eine Korrektur und hilfe freuen;)

(mir kommt mein Lösungsansatz zu einfach vor! Deshalb die Unversicherheit)

ich bitte auch um eine Erklärung, damit ich es nachvollziehen kann.

Unten im Code siehen sie meine Bemühungen.


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;
    while (!rangliste.isEmpty()){
        rangliste.toFirst();
        besterSpieler = rangliste.getContent();
        rangliste.next();
        while (rangliste.hasAccess()){
            aktSpieler = rangliste.getContent();
            if (besterSpieler.getHandicap() > aktSpieler.getHandicap()){
                besterSpieler = aktSpieler;
            }
            rangliste.next();
        }
        neueListe.append(besterSpieler);
        rangliste.toFirst();
        while(rangliste.getContent() != besterSpieler){
            rangliste.next();
        }
        rangliste.remove();
    }
    rangliste = neueListe;
}
public void umbenennen (String pName, String pNeuerName){
    rangliste.toFirst();
    Spieler aktSpieler;

    while (rangliste.hasAccess()){
        aktSpieler= rangliste.getContent();
        aktSpieler.setName(pNeuerName);
        return;
    }
    //anwaerter = temp;
    //return ergebnis;

}
}


Avatar von

1 Antwort

0 Daumen

Fürs nächste mal:
Warum führst du deinen Code nicht einfach mal aus und schaust dir an, ob das richtige rauskommt?

Was bei dir noch fehlt:

-Prüfen ob der aktuelle Spieler aus der Rangliste den Namen pName hat und NUR dann den Namen ändern.

- getContent() gibt ja nur den aktuellen Spieler zurück. Du musst noch dafür sorgen, dass in jedem Schritt der nächste Spieler zurückgegeben wird.

Avatar von

Ich programmiere zur Zeit auf Papier,also schriftlich. Da jetzt Corona Pandemie...Zeit ist, habe ich keine Möglichkeit ind der Schule das Programm zu testen.


Ich komme leider nicht auf die Lösung, habe ich denn nicht bereits nach dem aktuellen Spieler gefragt?

Du schreibst den ganzen Code hier doch nicht etwa per Handy oder?
Das sieht doch sehr nach "mit dem Computer/Laptop" eingetippt aus.
Was hält dich davon ab, dir eine IDE (Eclipse, BlueJ,...) zu installieren und das programm selber zu testen?

Ich empfehle dir sehr stark, dass du nach Möglichkeit nicht auf Papier, sondern am Computer programmieren solltest, damit du deinen Code auch ausführen kannst.

Du setzt den Zeiger auf das erste Element und da bleibt er dann.

Getippt habe ich den Code auf laptop , aber nicht per App,wie Bluej oder java.

Sondern wie Papier (windows)‐ write document.......


Mein laptop... Ist derzeitig etwas überlastet, durch die ganzen Schulsachen...

Die Programme stürzen die ganze Zeit nur ab. Deshalb habe ich aufgegeben und arbeite nun halt anders weiter


Was meinen Sie mit Zeiger?


Danke

Eigentlich braucht dein Laptop nicht viel Leistung um damit halbwegs vernünftig programmieren zu können.
Und schulsachen sollten den Laptop jetzt auch nicht so überlasten.

Wie wäre es mit einem Online Compiler?
https://www.tutorialspoint.com/compile_java_online.php
Hab da keine Erfahrungen mit, aber vielleicht kannst du sowas nutzen, um deine kleinen Programme auszuführen.


Du bekommst mit getContent() ja immer das aktuelle Element, aber was ist das aktuelle Element eigentlich und wer bestimmt das?
Innerhalb der Liste gibt es einen Zeiger, der macht genau das, was der Name sagt: Irgendwo draufzeigen.
Naja, eigentlicht zeigt der nicht nur irgendwo drauf, sondern auf das aktuelle Element.
Der Zeiger bestimmt also, was das aktuelle Element ist.
Möchtest du jetzt durch die Liste laufen, musst du den Zeiger dementsprechend bewegen.

Mit toFirst() setzt du diesen Zeiger zum Beispiel auf das erste Element.
Mit next() springt der Zeiger ein Element weiter.

Vielleicht mal anschaulich:
Da wo der Zeiger(Pfeil) ist, wird jeweils immer drauf zugegriffen, wenn du getContent() aufrufst.
Nach toFirst() sieht das so aus
Spieler1   <-----             
Spieler2
Spieler3
Spieler4
Spieler5
NULL

Rufst du jetzt next() auf, sieht das so aus:
Spieler1 
Spieler2  <-----            
Spieler3
Spieler4
Spieler5
NULL

Noch einmal next() aufrufen, dann sieht das so aus:
Spieler1
Spieler2            
Spieler3   <-----
Spieler4
Spieler5
NULL

Jetzt wieder toFirst aufrufen und wir haben:
Spieler1  <-----          
Spieler2
Spieler3
Spieler4
Spieler5
NULL

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community