Это не прямой ответ, но важное замечание об использовании СотрагеТо().
При проверке значения compareTo() всегда проверяйте x < 0
, x > 0
и x == 0
.
Не проверить x == 1
от Comparable.compareTo() Javadocs:
Сравнивает этот объект с указанным объектом для заказа. Возвращает отрицательное целое число, ноль или положительное целое число, так как этот объект меньше, равен или больше указанного объекта.
Примечание:
A negative integer
, не -1
.
A positive integer
, а не 1
.
Правда, проверка ==1
и ==-1
будет работать на BigInteger
. Это 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;
}
Но это по-прежнему плохая практика, и явно рекомендовал в JavaDocs:
Сравнивает этот BigInteger с указанным BigInteger. Этот метод предоставляется в предпочтении индивидуальным методам для каждого из шести булевых операторов сравнения (<, ==,>,> =,! =, < =). Предлагаемая идиома для выполнения этих сравнений: (x.compareTo(y) <op> 0
), где <op>
является одним из шести операторов сравнения.
спасибо за подсказку, но вы имеете в виду 'больше _than_ 0' право? Просто nitpicking ..: p –
@ Rosdi - уверен, "чем". Somatimas tha 'e' end tha 'a' kay chenga plecas на моем kayboerd ;-) –