对于一个小型项目(问题10项目Euler),我尝试将所有200万以下的质数求和。因此,我使用了蛮力方法,并从0迭代到2'000'000,并检查该数字是否为质数。如果是我将其添加到总和:
private int sum = 0;
private void calculate() {
for (int i = 0; i < 2000000; i++) {
if (i.isPrime()) {
sum = sum + i;
}
}
sysout(sum)
}
计算结果为1179908154,但这是不正确的。所以我将int更改为BigInteger,现在我得到了正确的总和142913828922。显然,int的范围已溢出。但是,为什么Java不能告诉我呢?(例如,例外)
因为可以想到您可能希望它以传统的Integer方式运行。对于肯定且不可撤销的错误,保留例外。
ETA:根据语言规范:
“内置的整数运算符不会以任何方式指示上溢或下溢。唯一可以引发异常(第11节)的数字运算符是整数除法运算符/(第15.17.2节)和整数余数运算符%(§ 15.17.3),如果右侧操作数为零,则抛出ArithmeticException。”
(http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句