Esto no es una respuesta directa, pero una nota importante sobre el uso de compareTo().
Al verificar el valor de compareTo(), siempre pruebe para x < 0
, x > 0
y x == 0
.
NO probar x == 1
De los Comparable.compareTo() javadocs:
compara este objeto con el objeto especificado por el orden. Devuelve un entero negativo, cero o un entero positivo ya que este objeto es menor, igual o mayor que el objeto especificado.
Nota:
A negative integer
, no -1
.
A positive integer
, no 1
.
Es cierto que la comprobación de ==1
y ==-1
funcionaría para BigInteger
. Este es el código 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;
}
Pero sigue siendo mala práctica, y recomienda explícitamente en contra de la JavaDocs:
compara esta BigInteger con el BigInteger especificado. Este método se proporciona con preferencia a los métodos individuales para cada uno de los seis operadores de comparación booleanos (<, ==,>,> =,! =, < =). El modismo sugerido para realizar estas comparaciones es: (x.compareTo(y) <op> 0
), donde <op>
es uno de los seis operadores de comparación.
gracias por la sugerencia, pero quieres decir 'más grande que 0' verdad? Acabo de criticar ...: p –
@Rosdi - seguro, "que". Somatimas tha 'e' end tha 'a' kay chenga plecas en mi kayboerd ;-) –