Wahl fuer die Highscoreliste

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich hab da mal eine Frage.
Was verwende ich am besten, wenn ich eigentlich nur eine Punktezahl
und einen Namen <String> haben moechte, diese jedoch absteigend sortiert sein sollen.

Ich hab das jetzt mal mit einer HashMap probiert.

Code:
HashMap<Number, String> highscore = new HashMap <Number, String> ();

bin jedoch drauf gekommen, dass das nicht das Wahre ist, denn
1. sortiert er es nicht (oder ich bin zu dumm dazu) und
2. da die Punkteanzahl der Key ist, ignoriert er Doppelte.. was mittlerweile klar ist

Jetzt zu meinem Problem:
Ich will irgendeinen Typ, der nicht dumm mit Keys umadum tut und der
mir nach einem bestimmten Feld sortiert.

ein String[][] ist nicht das Geigneteste, da ich es ja selber sortieren muesste.. und das ist echt... ****

Bitte um Rat.
 
G

Guest

Gast
Falls ihr meine Produktion auch sehen wollt, damit ihr mich richtig versteht

Code:
   private void init_hs() {
      
      highscore.put(1200, "1. Spieler"); 
      highscore.put(800, "Maximilian"); 
      highscore.put(500, "name");
      highscore.put(500, "mini");
   }

Code:
 public String HighscoreListe() {
      String list = ""; 
      
      System.out.println("highscore liste");
      int z = 0;
      Iterator it = highscore.entrySet().iterator();
      String[] arr; 
      String s; 
      
      while (it.hasNext() && z < 10) {
         
         s = it.next().toString();
         arr = s.split("=");
         
         
         list += "<tr>" + "<td style='text-align:center';>" + String.valueOf(z+1) + "</td>" +
         "<td>" + arr[1] + "</td>" + 
         "<td style='text-align:center';>" + arr[0]+ "</td>" + 
         "</tr>";
         z ++; 
         
      }
      
      return list;
   }
[/code]
 
S

SlaterB

Gast
erstelle dir ein Objekt Eintrag mit String und int und compare-Operation (implements Comparable),

dann hast du eine ArrrayList von Einträgen und kannst die mit
Collections.sort() sortieren,

-------

wenn du nach verschiedenen Kriterien sortieren willst
(also z.B. auch mal nach Namen),
dann brauchst du noch weitere Comparatoren, aber das kann man später noch klären

--------

zum schnellen Zugriff kannst du dir gerne separat noch eine HashMap anlegen,
zb. Hashmap<Integer,List<Eintrag>>

das hat mit dem Sortieren im Moment aber nix zu tun
 
G

Guest

Gast
Na ja, eigentlich wollte ich genau das vermeiden, aber anscheinend geht es nicht anders.
Ich wollt wissen ob es so etwas schon vordefiniertes gibt.

Aber trotzdem danke.
 
G

Guest

Gast
Also ich hab das jetzt mal so gemacht.

Ich hab ne eigene Klasse erstellt, die nichts kann, außer einen Namen und die Punkte aufzunehmen.

Code:
public class Maxerl implements Comparable {
   int punkte; 
   String name;
   
   Maxerl (int punkte, String name) {
      this.punkte = punkte; 
      this.name = name;
   }
   
   public int compareTo(Object arg0) {
      return 0;
   } 
}

und damit eine ArrayList befuellt

Code:
ArrayList <Maxerl> highscore = new ArrayList <Maxerl>();


Code:
   private void init_hs() {
      
      highscore.add(new Maxerl(1200, "1. Spieler"));
      highscore.add(new Maxerl(800, "Maximilian")); 
      highscore.add(new Maxerl(500, "name")); 
      highscore.add(new Maxerl(500, "mini"));
      highscore.add(new Maxerl(700, "bertha"));
      highscore.add(new Maxerl(900, "midi"));
      
   }

soweit so gut, aber wie kann ich das jetzt sortieren?

denn arraylist hat keine sort-methode.
Wie funktioniert das mit Collection.sort...???
Collection hat auch keine sort-methode .. oder hab ich etwas nicht richtig verstanden
 
S

SlaterB

Gast
das Problem ist, dass es mehrere Namen zu einem Punktestand gibt,
daher kannst du nicht den Punktestand für sich betrachen,
sondern musst die Objekte zusammenfassen,

wie du das nun machst ist egal, kannst auch beide Werte in einen String legen oder in ein Object[2],

oder eben in einer Map: Integer -> LISTE von Namen, statt Map: Integer -> Name

im Falle der Map müsstest du dann dennoch eine Liste der Zahlen erzeugen und diese mit Collections.sort sortieren,
dann hast du 2000, 1700, 1200, 60 sortiert und kannst zu jeder Zahl in der Map die zugehörigen Namen laden
 

Marco13

Top Contributor
Hi

WAS wolltest du vermeiden? Die Erstellung einer "Eintrag"-Klasse, oder die doppelte Datenhaltung (in List UND Map)?

So eine "Eintrag"-Klasse macht durchaus Sinn. Die könnte dann auch eine Methode anbieten wie "getHTML()", die den String zurückliefert, den du in der Methode "HighscoreListe()" für jeden einzelnen Eintrag erstellst....

Die doppelte Datenhaltung sollte man - wenn möglich - schon vermeiden. In welchem Zusammenhang mußt du denn auf so einen Einrag (mit der Punktzahl als Key) zugreifen?

bye
 
G

Guest

Gast
Entschuldige, ich hab es falsch geschrieben.

Also jetzt funktioniert es. Danke!

Für alle, die genau so dumm sind wie ich:

Code:
  public int compareTo(Object arg0) {
      
      return ((Maxerl) arg0).punkte - this.punkte;
   }


und dann die Ausgabe:


Code:
   public String HighscoreListe() {
      String list = ""; 
      int z = 0;
      
      
      Collections.sort(highscore);
      Iterator it = highscore.iterator(); 
      Maxerl m; 
      while (it.hasNext() && z < 10) {     
          m = (Maxerl) it.next();  
          
         list += "<tr>" + "<td style='text-align:center';>" + String.valueOf(z+1) + "</td>" +
         "<td>" + m.name + "</td>" + 
         "<td style='text-align:center';>" + m.punkte+ "</td>" + 
         "</tr>";
         z ++; 
         
      }

      return list;
   }
 
G

Guest

Gast
Naja, ich wollte die zusaetzliche Klasse vermeiden.

Da es ja nur ein paar Zeilen sind, hab ich gehofft, dass es sowetwas..
in der Art eine unindizierte Liste, nach der man etwas sortieren kann gibt.
Aber so funktioniert es blendend, also danke ich dem Herrn SlaterB herzlichst ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Programmierrichtlinie enthält Leitlinien und Regeln für die Wahl von Bezeichnern von Routinen.. Java Basics - Anfänger-Themen 8
H Java-Editor Wahl Java Basics - Anfänger-Themen 15
G Collections Wahl der richtigen Collection Java Basics - Anfänger-Themen 11
G Wahl zwischen Typklassen Java Basics - Anfänger-Themen 3
1 Wahl der Datenstruktur für die Suche. Java Basics - Anfänger-Themen 9
S Library fuer Graphen Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
M Klasse fuer eine 5er Liste? Java Basics - Anfänger-Themen 5
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
B Externe Libraries fuer Applet ... Pfad eingeben? Java Basics - Anfänger-Themen 23
J MouseListener fuer gezeichnete Polyline Java Basics - Anfänger-Themen 3
B Lizenz fuer Programm vergeben. Java Basics - Anfänger-Themen 13
P Zufallszahlen fuer Lotto generieren Java Basics - Anfänger-Themen 28
S In Eclipse relativen Pfad fuer Tomcat Server erstellen..? Java Basics - Anfänger-Themen 3
V ObjectOutputStream/ObjectInputStream eines Objectes fuer mehrere Threads Java Basics - Anfänger-Themen 6
S Methode die Wrapper Klasse fuer einen primitiven Typ zurueck Java Basics - Anfänger-Themen 11
S String Konstante kann nicht fuer Annotation verwendet werden Java Basics - Anfänger-Themen 2
B Netzwerkloesung fuer Spiel Java Basics - Anfänger-Themen 4
C Links fuer Tuts und so. Java Basics - Anfänger-Themen 2
S Highscoreliste Java Basics - Anfänger-Themen 8
G Highscoreliste mit Java erstellen [Application] Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben