2015-10-20 1 views
0

Actuellement je travaille sur un projet dans lequel je dois utiliser ce diagramme UML pour créer et classe supplémentaire je comprends tout mais je suis déconcerté par la dernière ligne.+ compareTo (wordtoCompare: Word): Entier Java

compareTo(wordToCompare : Word) : Integer 

Étant donné que Word est le nom de la classe, comment insérer un argument? J'ai essayé d'entrer un objet en tant qu'argument mais il dit:

L'objet est un type incompatible avec Word.

J'ai recherché si Word était un type de données non primitif mais ne trouvait aucune information. Je suis plutôt inexpérimenté et assez confus si quelqu'un pouvait prêter de l'aide je serais grandement reconnaissant.

Word class UML 
-wordCharacters : String 
-count : integer 
+ CONSTRUCTOR (word : String) 
+ getWord() : String 
+ getCount() : Integer 
+ incrementCount() : void 
+ toString() : String 
+ equals(wordtoCompare : Object) : Boolean 
+ compareTo(wordtoCompare : Word) : Integer 

@Override 
public boolean equals(Object wordtoCompare) { 
    boolean flag = false; 
    String currentWord = wordtoCompare.getClass().getName(); 

    this.compareTo(wordtoCompare); 

    return flag; 
} 

public Integer compareTo(Word wordtoCompare) { 

    return 0; 
} 
+0

pouvez-vous poster le code de 'compareTo'? – SomeJavaGuy

+0

Je ne vois pas comment vous êtes limité par le type de paramètre étant la même classe. Pouvez-vous élaborer sur le problème? – ChiefTwoPencils

+2

Bien sûr, le type de retour est 'Integer', pas' int'? Parce qu'il semble que votre classe 'Word' devrait implémenter' Comparable '. – Seelenvirtuose

Répondre

1

vous surchargez la méthode equals et il devrait regarder un peu comme ça. Vous devez vérifier si le ObjectwordtoCompare est du type Word ou s'il s'agit de l'objet actuel. Après avoir vérifié si c'est un type ou sous-type de Word vous pouvez lancer le wordtoCompare à un objet actuall Word et faire vos affaires avec.

@Override 
public boolean equals(Object wordtoCompare) { 
    boolean flag = false; 
    if(wordtoCompare == this) return true; 
    if(!(wordtoCompare instanceof Word)) return false; 
    Word word = (Word)wordtoCompare; 

    this.compareTo(word); 
    // Whatever you do with your flag 
    return flag; 
} 
+1

Je suis un tel nool lol j'ai juste oublié que je pourrais utiliser cela pour signifier la classe que je suis en merci Kevin pour me le rappeler! –

0

Vous pouvez simplement créer la méthode compareTo avec un paramètre Word. (Word est la classe que vous êtes en train de créer)

public class Word{ 
    .... 

    public int compareTo(Word wordToCompare){ 
     int result = 0; 
     //do your compare stuff 
     return result; 
    } 

} 

Si ce n'est pas votre problème, je ne comprenais pas le problème correctement

Edit:

Votre equals méthode recherche les éléments suivants :

public boolean equals(Object wordtoCompare) { 
    boolean flag = false; 
    String currentWord = wordtoCompare.getClass().getName(); 

    this.compareTo(wordtoCompare); 

    return flag; 
} 

Mais vous devez vous assurer que l'objet avec lequel vous travaillez est vraiment un mot.

@Override 
public boolean equals(Object wordtoCompare) { 
    boolean flag = false; 
    if(wordtoCompare == this) return true; 
    if(!(wordtoCompare instanceof Word)) return false; 
    Word word = (Word)wordtoCompare; 

    int compareResult = this.compareTo(wordtoCompare); 
    // Whatever you do with your flag 
    return flag; 
} 

Cette méthode est extraite de Kevin Esche, car il a correctement implémenté cette méthode. Je vous remercie.

Et puis vous devez implémenter compareTo correctement.

0

Quelque chose comme ça, je suppose que

class Word{ 
    String wordCharacters; 
    int count; 
    public Word(String word){ 
    ... 


    } 

.. other stuff 

public int compareTo(Word other){ 
    return wordCharacters.compareTo(other.wordCaracters) 
} 

}