将素数存储到部分数组中

时间:2011-12-06 20:12:57

标签: java

我正在尝试将所有素数1-100存储到部分数组中,然后打印结果。

我需要在不同的方法中使用它们。

我想我想出了如何判断一个数字是否为素数,而不是如何将该数字返回给要存储到数组中的main方法。

到目前为止,这是我的代码:

主要方法:

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

isPrime方法:

public static boolean isPrime (int currNum, int [] primeArray,int numPrimes) {  
    boolean prime=true;

    for(int i=0; i<numPrimes; i++) {
        if(currNumber/2%primeArray[i]==0)
            prime=false;
        break;
    }
    return prime;
} // end isPrime

任何建议都将受到赞赏;现在非常困惑。

3 个答案:

答案 0 :(得分:0)

您的代码有些问题。在main方法中,您将currNum传递给isPrime()方法调用。该变量不存在,您的代码不应该编译。您希望将currNumber传递给该方法调用。第二件事是你的 if 语句将“prime”布尔值赋值为true,而不是检查它。它应该是if(prime)

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

    if(currNum%primeArray[i]==0) {
        prime = false;
        break;
    }

由于您正在遍历素数数组,因此for循环应停止在素数的数量,而不是当前数字:

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

答案 1 :(得分:0)

你做得很好,我马上就能看到一些错误:

  1. if(prime=true)应为if(prime==true),或者对于通常只使用表达式的布尔值,即if(prime)

  2. 检查您检查原始状态的循环。 x%1将始终为0;)

答案 2 :(得分: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;
}