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

时间:2021-04-06 12:27:52

标签: java arrays for-loop

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

我也用可视化工具检查过,但仍然不明白为什么会这样。 谢谢你的时间

1 个答案:

答案 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]
相关问题