用Java输出正确的质数

Outputting correct prime numbers in Java

本问题已经有最佳答案,请猛点这里访问。

我目前正在执行的Java程序有一个小问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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的结果。

感谢您的任何帮助。


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

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

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


1
2
3
4
5
6
7
8
9
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]);
        }
    }
}

输出量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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