有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么在我尝试用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,0]

虽然我想 [2,3,5,7,11,13,17,19,23,29]

我也用可视化工具检查过,但仍然无法理解为什么会这样。 谢谢你抽出时间


共 (1) 个答案

  1. # 1 楼答案

    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]