2016-01-21 1 views
-1
public int compareTo(Person p) { 
    int res = 1; 
    String personStr = p.getId(); 
    String thisId = this.getId(); 

    if(thisId.equals(personStr)){ 
     res = 0; 
    } 
    else if(thisId.compareTo(personStr)){ 
     res = -1; 
    } 

    return res; 
} 

Une méthode relativement simple compareTo que j'ai implémentée mais je n'obtiens pas le message d'erreur. La condition dans l'autre si statemint me donne un message disant qu'il ne peut pas convertir d'int en booléen. Je comprends, mais la chose est que j'utilise netiher. Je veux juste comparer 2 cordes simples, pourquoi cela arrive-t-il?Java CompareTo états de méthode Je ne peux pas convertir int en booléen même si aucun n'est utilisé

Répondre

6

Ce que vous devez noter est que l'interface « compareTo » est de retour d'un int « de compareTo int public » étant le signe

si les déclarations se fondent sur une valeur booléenne, mais vous utilisez thisId.compareTo (personStr), qui renvoie un entier, tout comme la méthode que vous créez.

Votre première instruction if est correcte - 'equals' renvoie un booléen. Cependant, la seconde n'a pas, il retournera probablement soit -1, 0 ou 1.

+0

Ah, maintenant je comprends ... * palmslap. Été une longue journée. Je viens de mettre thisId.compareTo (personStr) == -1) {... et cela a bien fonctionné. – Baxtex

+0

Nous les avons tous, ne vous inquiétez pas. –

+2

@Baxtex il serait préférable d'utiliser 'thisId.compareTo (personStr) <0' - en théorie compareTo pourrait renvoyer autre chose que -1, 0 ou 1 - disons -5 par exemple. – assylias

2

mais la chose est que j'utilise netiher

Etes-vous sûr à ce sujet?

Il en résulte une int:

thisId.compareTo(personStr) 

Mais vous l'utilisez comme Boolean:

if (yourResult) 

Une déclaration if nécessite un booléen, il peut non seulement être utilisé sur tout valeur. Par exemple, considérez la différence entre ceci:

if (value == 1) 

et ceci:

if (value) 

Dans certaines langues, vous pouvez vous en sortir avec ça. Certaines langues attribuent des degrés de "vérité" à tous les types, vous permettant de les utiliser dans des expressions booléennes. Java n'en fait pas partie. Vous devez définir explicitement votre logique booléenne en Java:

if(thisId.compareTo(personStr) > 0) // or whatever your logic should be 
0

si vous voulez juste de comparer ces 2 chaînes pourquoi ne pas utiliser

public int compareTo(Person p) { 
    String personStr = p.getId(); 
    String thisId = this.getId(); 
    return thisId.compareTo(personStr); 
}