Ce n'est pas une réponse directe, mais une note importante sur l'utilisation compareTo(). Lors de la vérification de la valeur de compareTo(), vérifiez toujours x < 0
, x > 0
et x == 0
.
Ne pas tester pour x == 1
Des Comparable.compareTo() javadocs:
Compares cet objet avec l'objet spécifié pour l'ordre. Renvoie un entier négatif, zéro ou un entier positif car cet objet est inférieur, égal ou supérieur à l'objet spécifié.
Note:
A negative integer
, pas -1
.
A positive integer
, et non 1
.
est vrai, la vérification des ==1
et ==-1
travaillerait pour BigInteger
. Voici le code BigInteger.compareTo()
:
public int compareTo(BigInteger val) {
if (signum == val.signum) {
switch (signum) {
case 1:
return compareMagnitude(val);
case -1:
return val.compareMagnitude(this);
default:
return 0;
}
}
return signum > val.signum ? 1 : -1;
}
Mais il est encore une mauvaise pratique, et explicitement recommandé contre la JavaDocs:
compare cette BigInteger avec le BigInteger spécifié. Cette méthode est fournie de préférence à des méthodes individuelles pour chacun des six opérateurs de comparaison booléens (<, ==,>,> =,! =, < =). L'idiome suggéré pour effectuer ces comparaisons est: (x.compareTo(y) <op> 0
), où <op>
est l'un des six opérateurs de comparaison.
merci pour le conseil, mais vous voulez dire «plus gros _than_ 0» non? Juste nitpicking ..: p –
@Rosdi - bien sûr, "que". Somatimas that 'e' end tha 'un' kay chenga plecas sur mon kayboerd ;-) –