当程序找到素数时,它会编译。
但是在运行时发生了错误。我该如何解决?
查找素数的最简单方法是什么?
错误:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at PrimeNumbers.main(PrimeNumbers.java:6)
代码:
import java.util.*;
class PrimeNumbers {
public static void main(String args[]) {
for (int i = 0; i <= 100; i++) {
for (int j = 0; j < i; j++) {
if (i % j == 0) {
break;
} else {
System.out.println(i);
}
}
}
}
}
答案 0 :(得分:1)
你需要改变你的第二个for循环从1开始而不是0.因为零模块是一个错误。
for(int j=1;j<i;j++){
if(i%j==0){
答案 1 :(得分:1)
您必须更改以下代码:
class PrimeNumbers{
public static void main(String args[])
{
boolean flag;
for(int i=1;i<=100;i++)
{
flag = true;
for(int j=2;j<=(i/2);j++){
if(i%j==0)
flag = false;;
if(flag == true)
System.out.println(i);
}
}
答案 2 :(得分:0)
在循环的第一次迭代中,你有i = 0和j = 0。为了获得模量,i除以j。因此,您在第一次迭代中执行:
0/0
因此得到除以零的异常。
答案 3 :(得分:0)
质数计算有两种可能的方法:
public static boolean isPrime(long num) {
return num > 1 && LongStream.rangeClosed(2, (long)Math.sqrt(num)).noneMatch(div -> num % div == 0);
}
public static boolean isPrime1(long num) {
for (long i = 2, sqrt = (long)Math.sqrt(num); i <= sqrt; i++)
if (num % i == 0)
return false;
return true;
}
主要表现技巧足以只检查 Math.sqrt(num)数字。
答案 4 :(得分:0)
public static void main(String args[]){
boolean flag=false;
int i=1;
while(i<=100){
for(int j=2;j<=i/2;j++) {
if(i%j==0){
flag=true;
break;
}else {
flag=false;
}
}
if(flag!=true) {
System.out.println("Prime number--->" +i);
}
i++;
}
}