java - 如何修复除以零异常?
问题描述
这是Sphere Online Judge (SPOJ)上用于主生成器的问题。
输入:t
单行中的测试用例数(t<=10)。在接下来的 t 行中的每一行中都有两个数字 m 和 n。
输出:对于每个测试用例,打印所有质数 p,使得 m <= p <= n。
我已将素数 [0] 和素数1设为 -1。
int range[][] = new int[t][2];
for (int i = 0; i < t; i++) //take t ranges
{
for(int j = 0; j < 2; j++)
{
range[i][j] = sc.nextInt();
}
}
for(int i = 0; i < t; i++)
{
int prime[] = new int[range[i][1]+1];
for(int k = 2; k <= range[i][1]; k++)
{
prime[k] = k;
}
prime[0] = -1;
prime[1] = -1;
for(int k = 2; k <= range[i][1]; k++)
{
for(int m = k + 1; m < range[i][1]; m++)
{
int x = prime[k];
if(prime[m] % x == 0)
{
prime[m] = 0;
}
}
}
}
我试着用eratosthenes的筛子解决它。输出是:
Exception in thread "main" java.lang.ArithmeticException: / by zero
解决方案
您看到除以零异常是因为您的程序中的一条语句试图将一个值除以零值,而这在 Java 或我所知道的任何其他编程语言中是不允许的。
您可以做两件事,(1)检查除数的值,如果它为零,则不要进行除法或(2)使用 try/catch 捕获异常。
参见Java if vs. try/catch 开销以及Using try-catch java
查看您的代码,我不确定除以零的位置,尽管它可能是您使用模运算符 ( %
) 检查除法的余数是否为零的区域:
for(int m=k+1; m<range[i][1]; m++)
{
int x = prime[k];
if(prime[m] % x == 0) // use modulus operator to check the remainder
{
prime[m] = 0;
}
}
您可能想要执行以下操作:
for(int m=k+1; m<range[i][1]; m++)
{
int x = prime[k];
if(x == 0 || prime[m] % x == 0) // use modulus operator to check the remainder
{
prime[m] = 0;
}
}
推荐阅读
- python - 由于找不到模块错误,无法在 python 中运行测试
- html - 如何为电子商务购物车添加 cookie?
- math - Mathjax vs 凯特克斯
- go - 存在步骤时的Godog未定义步骤
- java - 在java中使用selenium我想点击cookie的“接受”按钮
- huawei-mobile-services - HMS Core(APK)更新弹窗无法关闭导致联合作战应用/游戏被拒绝怎么办?
- python - 如何在 python 中使用 realsense、darknet 和 deproject_point_to_pixel() 来计算对象的大小
- reactjs - 如何从角度应用程序中的反应应用程序接收更新的身份验证令牌
- python - 如何使用 expected_conditions.text_to_be_present_in_element_value,但 _text 参数是元组中的任何字符串?
- python - 按函数过滤 numpy 数组