2017-10-21 31 views
0

Je reçois une affectation pour trier un tableau de valeurs entrées en utilisant à la fois le tri par insertion et le tri par sélection. J'ai quelques problèmes avec l'écrasement de la méthode compareTo avec la classe Item. Je voudrais qu'il trier de sorte que si deux éléments sont évalués le même, il compare ensuite en fonction de Category. Les articles So Child (C) viennent en premier, puis M et ensuite Women. C'est mon code et chaque fois que je tente de le compiler, j'obtiens une erreur en disant que double ne peut pas être référencé.Utilisation de CompareTo pour comparer à la fois une chaîne et une valeur double dans un tableau?

public int compareTo (Object other) { 
     int result; 

     double otherPrice = ((Item)other).getClothPrice(); 
     String otherCategory = ((Item)other).getClothCategory(); 

     if (clothPrice == otherPrice) 
     result = clothCategory.compareTo(otherCategory); 
     else 
     result = clothPrice.compareTo(otherPrice); 

     return result; 
} 

Répondre

7

D'abord, votre méthode compareTo devrait prendre un Item comme paramètre. Si cela entraîne une erreur de compilation, assurez-vous que Item est en train d'implémenter Comparable<Item>.

Pour comparer double primitives valeurs, utilisez Double.compare:

public int compareTo(Item other) { 
    int result = Double.compare(clothPrice, other.clothPrice); 
    if (result == 0) { 
     result = clothCategory.compareTo(other.clothCategory); 
    } 
    return result; 
} 

Si vous utilisez Java 8, vous pouvez préférer utiliser certaines des fonctionnalités les plus avancées de Comparator qui font étendre ce code beaucoup plus simple:

private static final Comparator<Item> naturalOrdering = Comparator 
     .comparingDouble(Item::getClothPrice) 
     .thenComparing(Item::getClothCategory); 

public int compareTo(Item other) { 
    return naturalOrdering.compare(this, other); 
} 
+0

J'oubliais d'ajouter le comparable, je vous remercie pour que je fini par obtenir le code de travail en changeant juste l'autre à result = Double.compare (clothPrice, autrePrice); Serait-ce la même chose? –

+0

@TommyHarvey Oui, cela accomplirait la même chose. Je viens de réécrire votre code de la façon dont j'ai vu la plupart des gens l'écrire. – 4castle

+0

Ok merci je ne faisais que sortir de l'exemple qu'on nous avait donné en classe. Merci beaucoup pour votre aide. –