这不是一个直接的答案,但关于使用的compareTo一个重要的注意事项()。
当检查compareTo()的值时,总是测试x < 0
,x > 0
和x == 0
。
不要为x == 1
从Comparable.compareTo()的javadoc测试:
比较此对象与指定对象的顺序。返回负整数,零或正整数,因为此对象小于,等于或大于指定的对象。
注:
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'对吗? Just nitpicking ..:p – 2010-11-04 14:49:37
@Rosdi - 当然,“比”。 Somatimas tha'e'end tha'a'kay chenga plecas on my kayboerd ;-) – 2010-11-04 15:27:14