2017-11-30 11 views
0

Also muss ich ein TreeSet von Spieler-Objekten erstellen, die eine höhere Punktzahl als eine bestimmte Punktzahl haben. Ich darf keine for-Schleife verwenden. Ich habe einen Vergleicher geschrieben und eine Liste des Bedarfsobjekts erstellt, aber wenn ich die Liste dem Treeset hinzufüge, bekomme ich einen Player, der nicht in java.lang.Comparable Fehler umgewandelt werden kann.Hinzufügen einer Liste zu einem Baumsatz mit einem Komparator

Hinweis: Alles funktioniert, bis ich versuche, es zum TreeSet hinzuzufügen, wenn ich den TreeSet herausnehme und nur highPlayers drucke, gibt es mir die gewünschte Liste.

Warum kann ich diese Liste nicht zum Treeset hinzufügen? Dank

public class TreeSetProblems2 { 

    public static void main(String[] args) { 
     List<Player> players = new ArrayList<>(); 

     Player p1 = new Player("Tom", 3); 
     Player p2 = new Player("Bucky", 42); 
     Player p3 = new Player("Tina", 23); 
     Player p4 = new Player("Bob", 15); 
     Player p5 = new Player("Shaun", 2); 
     //Player p6 = new Player("Tommy", 3); 

     players.add(p1); 
     players.add(p2); 
     players.add(p3); 
     players.add(p4); 
     players.add(p5); 

     System.out.print(highRollers(players, 9)); 
    } 

    public static TreeSet<Player> highRollers(List<Player> players, int score){ 
     TreeSet<Player> treeplayers = new TreeSet<>(); 
     Player dummy = new Player("Dummy", score); 
     players.add(dummy); 
     ScoreComparator sc = new ScoreComparator(); 
     Collections.sort(players, sc); 
     int index = players.indexOf(dummy); 
     List<Player> highPlayers = players.subList(index+1, players.size()); 
     treeplayers.addAll(highPlayers); 
     return treeplayers; 
    } 


} 

Antwort

1

Der entscheidende Punkt scheint zu sein, dass ein TreeSet nur Elemente einer Klasse enthalten kann, die den Comparable-Schnittstelle implementieren. Sie müssen Ihre Klasse "Player" ändern, um dies zu tun.

+0

ich dies entdecken, danke für die Antwort –

3

Ich habe meine eigene Lösung zu entdecken:

public static TreeSet<Player> highRollers(List<Player> players, int score) { 
    TreeSet<Player> treeplayers = new TreeSet<>(new ScoreComparator()); 
    treeplayers.addAll(players); 

    while(treeplayers.first().getScore() < score) { 
     treeplayers.pollFirst(); 
    } 

    return treeplayers; 
} 

Oder noch einfacher:

public static TreeSet<Player> highRollers(List<Player> players, int score) { 
    TreeSet<Player> treeplayers = new TreeSet<>(new ScoreComparator()); 
    TreeSet<Player> highRollers = new TreeSet<>(new ScoreComparator()); 

    treeplayers.addAll(players); 
    highRollers.addAll(treeplayers.tailSet(new Player("Dummy", score))); 

    return highRollers; 
} 
+0

oder noch einfacher –

+1

public static TreeSet Highroller (List Spieler, int Punktzahl) { \t \t TreeSet treePlayers = neues TreeSet <> (new ScoreComparator()); \t \t TreeSet highRollers = neues TreeSet <> (new ScoreComparator()); \t \t treeplayers.addAll (Spieler); \t \t highRollers.addAll (treeplayers.tailSet (neuer Player ("Dummy", Score))); \t \t Rückgabe highRollers; \t} –

+2

Ich schlage vor, die Antwort zu bearbeiten und den Code aus Ihrem Kommentar darin zu veröffentlichen –

Verwandte Themen