Java 埃拉托斯烯筛产量存在的问题
此代码将用户提交的编号设置为数组的上限。然后,它将所有元素设置为true。之后,它遍历数组并将所有位于非素数位置的元素设置为false 然后,它打印出数组中所有的真(素数)元素数,而不是它们的索引。然而,我不明白为什么我的代码在这里打印出2,然后是用户输入的数字范围中的所有奇数,因为所有的真元素都应该是实际的素数Java 埃拉托斯烯筛产量存在的问题,java,primes,Java,Primes,此代码将用户提交的编号设置为数组的上限。然后,它将所有元素设置为true。之后,它遍历数组并将所有位于非素数位置的元素设置为false 然后,它打印出数组中所有的真(素数)元素数,而不是它们的索引。然而,我不明白为什么我的代码在这里打印出2,然后是用户输入的数字范围中的所有奇数,因为所有的真元素都应该是实际的素数 public static void main(String [] args){ Scanner s = new Scanner(System.in); System.
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);
}
}
}
publicstaticvoidmain(字符串[]args){
扫描仪s=新的扫描仪(System.in);
System.out.print(“请输入要考虑的最大整数:”);
int bounds=s.nextInt();
布尔[]素数=新的布尔[边界];
int j=0;
for(int i=2;i
您正在使用j
将x
的倍数设置为false
。这适用于第一个循环,当x
为2
时,但是j
不会在下一个x
循环中重置,并且n
的循环不会重新输入,因此可以打印所有奇数
在进入j
循环之前,将j
重置为x
for(int x = 2; x < primes.length; x++){
j = x;
for(int n = 2; j < primes.length; n++){
启动调试器并开始工作。堆栈溢出的一个坏处是它鼓励人们不要学习使用调试器。使用调试器可能需要几秒钟才能找到答案,但堆栈溢出似乎更容易。
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97