Java使用数组查找指定区间素数输出大量0的问题咨询
问题根本成因
- Java中
int类型数组初始化后,未手动赋值的元素默认值为0。你创建的primeNumbers数组长度为传入的end参数值(即100),初始化后所有位置默认都是0。 - 代码中仅在判断当前数
n为素数时,才会给下标为n的位置赋值为n,非素数对应的数组下标位置未做任何修改,保留初始的0值。 - 最后遍历输出时你遍历了整个数组的所有元素,自然会将未修改的0值和素数一起输出,同时数组下标0、1对应的位置从未进入你的判断逻辑,所以输出开头也会出现两个0。
修复方案
提供两种常用修复方式,可按需选择:
方案1:输出时过滤0值
仅修改最后的遍历输出逻辑,过滤掉数值为0的元素即可:
for (int i : primeNumbers) { if (i != 0) { System.out.print(i + ", "); } }
方案2:改用动态集合存储素数(更推荐)
固定长度数组需要提前预留空间,空间浪费且需要额外判断,改用ArrayList按需存储素数即可:
import java.util.ArrayList; import java.util.Scanner; public class oneDimensionArray { public static void main (String[] args) { finding(2,100); } public static void finding(int start, int end) { // 改用ArrayList存素数,无需提前指定长度 ArrayList<Integer> primeNumbers = new ArrayList<>(); for (int n = start; n < end; n++) { boolean check = true; int tryNum = 2; while (tryNum <= n / 2) { if (n % tryNum == 0) { check = false; break; } tryNum += 1; } if (check) { // 是素数就直接加入集合 primeNumbers.add(n); } } for (int i : primeNumbers) { System.out.print(i + ", "); } } }
内容的提问来源于stack exchange,提问作者Macro Chen
相关产品推荐
相关产品推荐

