2011-09-21 5 views
2

Je suis en train de passer outre comparable thusly:java mettre en œuvre comparer sur deux éléments

public int compareTo(Object other) {   
    if(other.getlength() > this.getlength()){ 
     return 1; 
    } else if (other.getlength() < this.getlength()){ 
     return -1; 
    } else { 
     if (other.getVal() > this.getVal()){ 
      return 1; 
     } else { 
      return -1; 
     } 
    } 
} 

Ce que je veux arriver, est la liste à trier sur la longueur, puis si la longueur est la même, Je veux que ces mêmes éléments soient triés (en place) sur leurs valeurs. Mais ma mise en œuvre ne fonctionne pas correctement. Quelqu'un peut-il voir ce que je fais mal?

Mes résultats sont les suivants:

a b = 3 
a b c = 1 
a b c = 1 
a b = 2 
a b = 1 

Les résultats que je veux sont:

a b c = 1 
a b c = 1 
a b = 3 
a b = 2 
a b = 1 
+1

Que faire si la longueur et Val sont les mêmes? Vous ne retournez jamais 0. –

+1

Je ne comprends pas votre question: (( –

+0

J'ai essayé d'avoir autre chose, retourner 0 dans la boucle else, c'est-à-dire si other.getVal() == this.getVal() alors il retournera 0, mais les résultats sont les mêmes – Neutralise

Répondre

2

Évitez la logique si possible. Sérieusement - si possible, utilisez l'arithmétique pour éviter si/d'autre. Il a tendance à être plus fiable. Dans ce cas:

public int compareTo(Object o) {   
    int ret = other.getlength() - this.getlength(); 
    if (ret == 0) { 
    ret = other.getVal() - this.getVal(); 
    } 
    return ret; 
} 
+0

Parfait, merci, et un bon conseil. – Neutralise

0

il ne ressort pas de vos remarques cette liste serait déjà triée ou non. Mais vous pouvez gérer cela en triant la liste après avoir comparé les longueurs. Mais sur une chose que vous faites mal, c'est object.getValue() ... cela n'a pas de sens que vous devez parcourir les deux listes et comparer les valeurs pour conclure qu'elles sont égales.

Ce n'était pas évident sans l'exemple désolé pour les commentaires ci-dessus, il n'est pas possible d'avoir ce résultat avec votre comparateur. Votre logique me semble correcte. Mais ce serait une bonne idée d'incorporer aussi les commentaires de w00t sinon vous aurez un < 'b ainsi qu'un> b et cela pourrait causer une erreur d'exécution. Veuillez vérifier si le comparateur est correctement appliqué à votre fonction de tri (objets).

+0

Le commentaire de w00te a la réponse correcte Vous pouvez vouloir supprimer le vôtre –

Questions connexes