在Java中输出正确的素数

时间:2014-10-09 17:17:19

标签: java primes

我目前正在做一个Java程序的小问题:

public class PrimeNumbers {

    public static void computePrimeNumbers(boolean[] prime, int n) {
        for (int i = 2; i < n; i++) {
            if (prime[i] == true) {
                for (int j = 2; j < n; j++) {
                    if ((j%i == 0) && (j != i)) {
                        prime[j] = false;
                        //System.out.println(j + " = " + prime[j]);
                    }
                }
            }
        }
    }

    public static void main(String[] args) {

        int n = 13;
        boolean[] prime = new boolean[n];

        prime[0] = false;
        prime[1] = false;

        for (int i = 2; i < n; i++) {
            prime[i] = true;
        }

        computePrimeNumbers(prime, n);

        for (int i = 0; i < n; i++) {
            System.out.println(i + " = " + prime[i]);   
        }
    }
}

如果整数(i)是素数,程序应输出“true”,否则输出false。嵌套for循环中if语句中注释掉的代码片段给出了正确的布尔语句(即它显示了运行时不是素数的整数),但是main中的最后一个for循环似乎只是显示给予素数数组的初始值 - 所以我假设来自computePrimeNumbers的结果在某种程度上被覆盖了。

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:2)

if条件使用赋值运算符而不是相等运算符:

if (prime[i] = true) {  // should be if(prime[i] == true) or just if(prime[i])

prime[i] = true会将值true分配给数组元素,if条件将始终评估为真。

答案 1 :(得分:0)

if (prime[i] == true) {

    for (int j = 2; j < n; j++) {
        if ((j % i == 0) && (j != i)) {
            prime[j] = false;
             System.out.println(j + " = " + prime[j]);
        }
    }
}

输出

4 = false
6 = false
8 = false
10 = false
12 = false
6 = false
9 = false
12 = false
10 = false
0 = false
1 = false
2 = true
3 = true
4 = false
5 = true
6 = false
7 = true
8 = false
9 = false
10 = false
11 = true
12 = false