0 Daumen
47 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.


Danke!


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;
 
  }
}


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.

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