如何在查找素数1到100时解决错误java.lang.ArithmeticException

时间:2017-12-23 09:43:58

标签: java

当程序找到素数时,它会编译。

但是在运行时发生了错误。我该如何解决?

查找素数的最简单方法是什么?

错误:

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);
                }
            }
        }
    }
}

5 个答案:

答案 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++;
            }

        }