我是 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, 0]
虽然我想要 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
我也用可视化工具检查过,但仍然不明白为什么会这样。 谢谢你的时间
答案 0 :(得分:3)
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]