当我尝试用Java填充数组时,为什么函数会存储零



我是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]

最新更新