对于一个小项目(问题10项目欧拉),我试图总结低于2百万的所有素数.所以我使用了暴力方法并从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)
}
Run Code Online (Sandbox Code Playgroud)
此计算的结果是1179908154,但这是不正确的.所以我将int更改为BigInteger,现在我得到了正确的总和142913828922.显然int的范围溢出了.但是为什么Java不能告诉我那个?(例如,例外)
Jim*_*ley 13
因为可以想象您可能希望它以传统的整数方式运行.例外情况保留用于明确且不可逆转的错误.
ETA:从语言规范:
"内置整数运算符不以任何方式表示溢出或下溢.唯一可以抛出异常的数字运算符(第11节)是整数除运算符/(第15.17.2节)和整数余数运算符%(§ 15.17.3),如果右侧操作数为零,则抛出ArithmeticException."
(http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html)
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |