2017-06-06 2 views
-7

Ceci est mon code et je ne peux pas trier LinkedList.Je ne peux pas trier ma collection

import java.util.Collections; 
import java.util.LinkedList; 

import org.omg.CosNaming.NameComponent; 

public class Zug implements Comparable<Zug> { 

    private String abfahrtzeit; 
    private String zuggattung; 
    private int zugnummer; 
    private int fahrtzeit; 

    public Zug(String zeile) { 

     String[] teile = zeile.split(";"); 
     this.abfahrtzeit = teile[0]; 
     this.zuggattung = teile[1]; 
     this.zugnummer = Integer.parseInt(teile[2]); 
     this.fahrtzeit = Integer.parseInt(teile[3]); 

    } 

    public String getAbfahrtzeit() { 
     return abfahrtzeit; 
    } 

    public String getZuggattung() { 
     return zuggattung; 
    } 

    public int getZugnummer() { 
     return zugnummer; 
    } 

    public int getFahrtzeit() { 
     return fahrtzeit; 
    } 

    public String toString() { 
     return this.abfahrtzeit + ";" + this.zuggattung + ";" + this.zugnummer + ";" + this.fahrtzeit; 
    } 

    //       This is the Problem Block 

    @Override 
    public int compareTo (Zug z) { 

     String datei = "Zuege.dat"; 
     LinkedList<Zug> ll = new LinkedList<Zug>(); 

     Collections.sort(ll, new NameComponent()); 

     ll = getDaten(datei); 

     return this.fahrtzeit - z.getFahrtzeit(); 
    } 
// End Of Problem Block 

    private LinkedList<Zug> getDaten(String datei) { 
     return null; 
    } 
} 
+4

Alors, quel est le problème? Expliquez-le plus en détail que "Je ne peux pas trier ma liste chaînée" et "C'est le bloc problème". Avez-vous des erreurs? Si oui, alors quels sont les messages d'erreur exacts? Et pourquoi utilisez-vous la classe 'org.omg.CosNaming.NameComponent'? Cela ne semble pas avoir quelque chose à voir avec ce que vous essayez d'accomplir. – Jesper

+0

Comment créer et trier votre liste? Je ne comprends pas ce que vous essayez de faire dans la méthode 'compareTo' avec la création de nouvelles listes et le chargement d'un fichier dans celui-ci semble faux .. la méthode' compareTo' est seulement utilisée pour comparer deux objets, vous ne faites pas réellement trier là-bas. – xander

+0

'Collecitons.sort()' accepte comme second argument 'Comparator' non' Comparable'. – diginoise

Répondre

0
  • Comme RealSkeptic et Matoni écriture, vous ne devez pas faire autre chose dans la méthode compareTo(Zug z) que comparer this à z - comme le nom de la méthode implique. compareTo(Zug z) est appelé par des méthodes de tri d'une collection chaque fois qu'ils ont besoin de comparer deux éléments de cette collection. Le chargement de listes d'objets dans cette méthode n'a aucun sens.

  • La mise en œuvre la plus simple serait

    @Override 
    public int compareTo(Zug z) { 
        return this.fahrtzeit - z.getFahrtzeit(); 
    } 
    

    Vous pouvez tester votre code avec cette mise en œuvre. Générez quelques exemples d'objets Zug, ajoutez-les à un List, triez cette liste en utilisant Collecitons.sort() et profitez du résultat (ou donnez-nous un message d'erreur significatif).

  • Java Practices a an elaborate example sur la façon d'écrire un compareTo() -method.

  • S'il vous plaît noter que cette mise en œuvre est pas compatible avec equals() (comme indiqué dans le javadoc).

  • Le tri par fahrzeit pourrait ne pas être la seule façon de trier vos objets et ne devrait probablement pas être le ordre naturel. Vous devriez probablement implémenter un Comparator (par exemple FahrzeitComparator, AbfahrtzeitComparator ...) pour pouvoir trier selon différents critères. Voir ceci example.

Oh, et:

  • Réécriture votre code avec les noms de variables anglais permettrait plus de gens à comprendre ce que vos objets devraient représenter ...