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

问题描述 投票:0回答:5

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

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

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

错误:

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);
                }
            }
        }
    }
}
java
5个回答
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);
    }
}

1
投票

你需要改变你的第二个for循环从1开始而不是0.因为零模块是一个错误。

 for(int j=1;j<i;j++){
        if(i%j==0){

0
投票

在循环的第一次迭代中,你有i = 0和j = 0。为了获得模量,i除以j。因此,您在第一次迭代中执行:

0 / 0

从而得到除以零的异常。


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

        }

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)数字。

© www.soinside.com 2019 - 2024. All rights reserved.