Java 将素数存储到部分数组中

Java 将素数存储到部分数组中,java,Java,我试图将所有素数1-100存储到一个部分数组中,然后打印结果 我需要用不同的方法来处理它们 我想我知道了如何判断一个数字是否为素数,但没有知道如何将该数字返回到主方法以存储到数组中 以下是我目前的代码: 主要方法: public static void main (String[] args) throws IOException { int[] primeArray = new int[25]; primeArray[0] =2; int numPrimes = 1;

我试图将所有素数1-100存储到一个部分数组中,然后打印结果

我需要用不同的方法来处理它们

我想我知道了如何判断一个数字是否为素数,但没有知道如何将该数字返回到主方法以存储到数组中

以下是我目前的代码:

主要方法:

public static void main (String[] args) throws IOException {
    int[] primeArray = new int[25];
    primeArray[0] =2;
    int numPrimes = 1;
    boolean prime;
    int currNumber;

    for(currNumber=3; currNumber<=100; currNumber++) {
        prime= isPrime(currNumber,primeArray,numPrimes);

        if(prime=true) {
            primeArray[numPrimes]=currNumber;
            numPrimes++;

            if (numPrimes==25)
                break;
        }

        System.out.println(primeArray[numPrimes]);
    }
}
publicstaticvoidmain(字符串[]args)引发IOException{
int[]primeArray=新的int[25];
素数数组[0]=2;
int numPrimes=1;
布尔素数;
整数;

对于(currNumber=3;currNumber代码中的一些错误。在main方法中,您将
currNum
传递到
isPrime()中
method调用。该变量不存在,您的代码不应该编译。您希望将
currNumber
传递到该方法调用中。第二件事是if语句将“prime”布尔值赋值为true,而不是检查它。它应该是
if(prime)

isPrime()
方法中,可以在素数检查中添加一个
break;
,因为如果它可以被一个数字整除,它就不是素数,无需检查其余的除数:

    if(currNum%primeArray[i]==0) {
        prime = false;
        break;
    }
由于您正在遍历素数数组,因此for循环应该在素数的数量处停止,而不是在当前的数量处停止:

for(int i=0; i<numPrimes; i++)

for(int i=0;i您做得很好,我可以马上看到几个错误:

  • if(prime=true)
    应该是
    if(prime==true)
    或者对于布尔型,通常只使用表达式,即
    if(prime)

  • 检查检查素数的循环。x%1将始终为0;)


  • 我会将
    isPrime
    签名更改为
    public static boolean isPrime(int number)
    ,并对其进行定义,使其接受一个数字,并根据该数字是否为素数返回true/false

    public static boolean isPrime(int number) {
        if(number < 2) {
            return false;
        } else if(number < 4) {
            return true;
        }
    
        for(int i=2; i<=number/2; i++) {
            if(number % i == 0) {
                return false;
            }
        }
        return true;
    }
    
    public静态布尔值isPrime(整数){
    如果(数字<2){
    返回false;
    }否则如果(数字<4){
    返回true;
    }
    
    对于(int i=2;i如果您已经以
    currNumber
    的形式将数字返回到main方法,为什么您需要“将数字返回到main方法”?这不是问题的答案,但您可能希望查看Eratosthenes的筛选:我会将
    isPrime
    签名更改为
    公共静态布尔isPrime(int number)
    。提示不要给变量命名
    prime
    ,尤其是当它们是
    booleans
    时,请使用以下内容:
    isPrime
    告诉我们这个变量的值可以是真/假。对于其他程序员来说,更容易阅读。如果你把它保持为
    prime
    ,有人可以通过浏览你的代码来假设
    prime
    的值就是一个质数。你所说的“部分数组”是什么意思?我还想再添加一个条件:
    currNum/2我更新了上面的代码。.它编译得很好,但现在我得到了ArrayIndexOutofBounds错误。我知道原因,但不知道如何修复它。检查异常以找到获得该异常的行号。但在不知道的情况下,我猜这是因为您的
    primeArray[]
    只能容纳25个整数,而1到100之间有25个以上的素数。因此,要么增大该数组,要么在找到25个素数时停止。这很有意义,我在得到25个素数时停止了该数组。现在我想打印数组,所以我打印出“System.out.print(primeArray[numPrimes])对吗?我这样做,但它只是打印出所有0。您需要编写一些代码来打印数组中的每个素数,System.out.print(primeArray[numPrimes])不起作用。这似乎更容易,但这是我被要求的方法。
    public static boolean isPrime(int number) {
        if(number < 2) {
            return false;
        } else if(number < 4) {
            return true;
        }
    
        for(int i=2; i<=number/2; i++) {
            if(number % i == 0) {
                return false;
            }
        }
        return true;
    }