2017-04-19 3 views
1
if (value.compareTo(elementData[size]) >= 0) { 
    elementData[size + 1] = value; 
    size++; 
} else if (value.compareTo(elementData[0]) <= 0) { 
    for (int i = size; i >= 0; i--) { 
     elementData[i + 1]= elementData[i]; 
    } 

    elementData[0] = value; 
    size++; 
} 

La toute première instruction if doit renvoyer un nombre positif de la compareTo. J'ai débogué et confirmé qu'il renvoie un nombre positif mais il n'entre pas dans le bloc.Si la condition d'instruction ne passe pas mais devrait être !? (java)

Je compare des chaînes qui aiment ces "str1" "str2" ... etc. Cela fonctionne très bien jusqu'à ce que j'arrive à "str10" et que je doive le comparer à "str9". Il est dit que "str10" est moins que "str9" cela a-t-il un sens?

Il arrive toutes les 10 itérations. Donc, mon tableau ressemble à [str0, str1, str10 ... str19, str2, str20, str21, ... str29..etc]

+1

Si 'value.compareTo (elementData [taille])' renvoie une valeur supérieure à 0, alors ** ** entrera dans le bloc. S'il ne rentre pas dans le bloc, alors la valeur est inférieure à 0. Quels sont les types de 'value' et' elementData'? –

+2

Ne savez-vous pas que 1 vient avant 9? – stark

+0

Les données de valeur et d'élément sont toutes deux des objets comparables. – igork

Répondre

0

Vous semblez comparer chaque String dans leur forme lexicographique, ce qui signifie que str10 sera être placé avant str9. Vous aurez besoin de mettre en œuvre un comparateur personnalisé qui utilise l'algorithme Alphanum, comme vu here.

2

considérez comment les valeurs string sont comparées lors de l'utilisation de compareTo(String anotherString).

Compare deux chaînes lexicographiquement. La comparaison est basée sur la valeur Unicode de chaque caractère dans les chaînes. La séquence de caractères représentée par cet objet String est comparée lexicographiquement à la séquence de caractères représentée par la chaîne d'arguments. Le résultat est un entier négatif si cet objet String précède lexicographiquement la chaîne d'argument . Le résultat est un entier positif si cet objet String suit lexicographiquement la chaîne d'argument. Le résultat est zéro si les chaînes sont égales; compareTo renvoie 0 exactement lorsque la méthode equals (Object) renvoie true.

que vous pouvez voir ce qui se passe est quand "str10" est comparé à "str9" la valeur Unicode de '1' dans "str10" est inférieure à la valeur Unicode de '9' dans "str9" qui est la raison pour laquelle vous obtenez le résultat "str10"pas quels supérieur à "str9".

vous pourriez envisager l'algorithme Alphanum comme alternative.

+1

pourquoi la downvote? –

+0

Je n'ai aucune idée ^^. –