我目前正在做一个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的结果在某种程度上被覆盖了。
感谢您提前提供任何帮助。
答案 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