我是Java的新手,很快我就要开始上课了,但目前我是独自学习。我制作了一个函数来检查一个数字是否是素数,如果是,我将尝试用for循环将值存储在int数组中。该函数用于检测素数,但在存储值时,我会在数组中得到多个0。我不明白为什么,在网上也找不到任何答案。这是代码
import java.util.Arrays;
public class Exercises {
public static void main(String[] args){
int [] array = new int[10];
for(int i = 0; i < array.length; i++)
if (isPrime(i))
array[i] = i;
System.out.println(Arrays.toString(array));
}
public static boolean isPrime(int n){
if(n <= 1)
return false;
for(int i = 2; i <= n/2; i++)
if(n % i == 0)
return false;
return true;
}
}
我得到的结果是[0,0,2,3,0,5,0,7,0]
而我想要[2,3,5,7,11,13,17,19,23,29]
我也用可视化工具检查了一下,但仍然不明白为什么会这样。感谢您抽出时间
array[i] = i;
您只将值分配给数组的素数索引,即将2
分配给array[2]
,将3
分配给array[3]
,等等。
默认情况下,数组的所有其他索引的值保持为0
。
如果要分配给数组的所有索引,则需要第二个变量来跟踪数组的当前可用索引。
我建议使用while
循环而不是for
循环,因为它不足以迭代数组的索引。
int[] array = new int[10];
int num = 0;
int i = 0;
while (i < array.length) {
if (isPrime(num)) {
array[i] = num;
i++;
}
num++;
}
System.out.println(Arrays.toString(array));
现在输出将是
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]