2012-10-24 5 views
3

J'ai suivi un tutoriel, mais je n'ai pas réussi à faire ma Country classe Comparable pour mon BST.Rendre votre propre classe 'comparable'

principal:

BinarySearchTree A = new BinarySearchTree(); 
Country a = new Country("Romania", "Bucharest", 1112); 
A.insert(a); 

classe Pays:

public int compareTo(Object anotherCountry) throws ClassCastException { 
    if (!(anotherCountry instanceof Country)) 
     throw new ClassCastException("A Country object expected."); 
    String anotherCountryName = ((Country) anotherCountry).getName(); 
    int i = this.name.compareTo(anotherCountryName); 
    if(i < 0){ 
     return -1; 
    } else { 
     return 0; 
    } 
} 

erreur:

@Override 
public int compareTo(Object anotherCountry) throws ClassCastException { 
    if (!(anotherCountry instanceof Country)) 
     throw new ClassCastException("A Country object expected."); 
    String anotherCountryName = ((Country) anotherCountry).getName(); 
    return this.name.compareTo(anotherCountryName); 

Description Resource Path Location Type 

choc Nom: La méthode compareTo (Object) du pays de type a le même effacement que compareTo (T) de type Comparable mais ne le remplace pas Pays.java/Lab2_prob 4/src ligne 17 Java Problème

Description Resource Path Location Type 
The method compareTo(Object) of type Country must override or implement a supertype method Country.java /Lab2_prob 4/src line 17 Java Problem 

et classe:

public class Country implements Comparable<Country>{ 
    private String name; 
    private String capital; 
    private int area; 

Description Resource Path Location Type 

Le Pays de type doit mettre en œuvre la méthode abstraite héritée Comparable.compareTo (Pays) Country.java/Lab2_prob 4/ligne src 2 Java Problème

+2

Votre classe 'Country' étend-elle' Comparable '? –

+2

Quel problème ou erreur obtenez-vous réellement? – DNA

+0

désolé vient d'ajouter l'erreur. –

Répondre

16

Votre classe Country devrait mettre en œuvre Comparable:

public class Country implements Comparable<Country> 

Ensuite, votre méthode compareTo devrait ressembler à ceci:

@Override 
public int compareTo(Country anotherCountry) { 
    return anotherCountry.getName().compareTo(this.name); 
} 

Notez la signature de compareTo. Le paramètre peut (et doit) être du type Country et non Object. Cela est possible en raison du paramètre de type générique sur Comparable. L'avantage est que vous n'avez plus à vérifier le type. L'inconvénient est que vous pouvez seulement comparer Country à d'autres objets Country (ou ses sous-types) mais dans la plupart des cas c'est ce que vous voulez quand même. Sinon, vous devez changer le paramètre de type. Par exemple. Si vous utilisez Comparable<Object>, la signature de compareTo peut à nouveau être Object. Vous pouvez lire sur les génériques here si vous voulez.

+1

Rappelez-vous simplement 'Comparable' est une interface. Désolé pour l'erreur. –

+0

Pouvez-vous s'il vous plaît vérifier les erreurs que j'ai eu après les corrections que vous m'avez suggérées? jolie s'il vous plaît –

+0

a modifié ma réponse –

4

un Comparable devrait renvoyer:

a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

Cependant, votre code ne renvoie que -1 ou 0, s n'est pas correct; cela implique que this peut être inférieur à l'autre objet, ou égal, mais pas plus grand!

Il n'est pas nécessaire de modifier les valeurs renvoyées par name.compareTo() - vous pouvez simplement les retourner directement.

Questions connexes