此代码将用户提交的数字设置为数组的上限。然后,它将所有元素设置为true。之后,它遍历数组,并将所有非素数位置的元素设置为false。
然后,它打印出数组中的所有真(元素)数字,而不是它们的索引。但是,我无法弄清楚为什么我的代码在这里输出2,然后是用户输入数字范围内的所有奇数,因为所有真实元素应该只是实际的素数。
public static void main(String [] args){
Scanner s = new Scanner(System.in);
System.out.print("Please enter the largest integer to consider: ");
int bounds = s.nextInt();
boolean [] primes = new boolean[bounds];
int j = 0;
for(int i = 2; i < primes.length; i++) {
primes[i] = true;
}
for(int x = 2; x < primes.length; x++) {
for(int n = 2; j < primes.length; n++) {
j = n * x;
if(j < primes.length) {
primes[j] = false;
}
}
}
for(int k = 0; k < primes.length; k++) {
if(primes[k]) {
System.out.println(k);
}
}
}
答案 0 :(得分:2)
您正在使用j
将x
的倍数设置为false
。这适用于第一个循环,当x
为2
时,j
不会为下一个x
循环重置,n
{ {1}}循环未重新输入,因此您将打印所有奇数。
在进入for
j
循环之前,将x
重置为j
。
for
输入for(int x = 2; x < primes.length; x++){
j = x;
for(int n = 2; j < primes.length; n++){
的输出:
100