Java数组过滤倍数方法输出含零问题排查与解决求助
解决数组过滤后出现零值的问题
我明白你遇到的问题啦——你写的方法里新数组和原数组长度相同,没被赋值的位置默认是0,再加上索引处理的小错误,就导致输出里出现了多余的零。咱们一步步来修复它:
先看原代码的问题点
你的代码里有两个关键问题:
- 索引错误:
NewListIndex++放在了if语句外面,不管当前元素是否被加入新数组,索引都会自增。这会导致符合条件的元素被存在不连续的位置,中间空出来的位置就是默认的0。 - 数组长度冗余:新数组初始化时用了原数组的长度,但实际符合条件的元素更少,多余的位置自然填充
0。
修复方案1:先统计数量再创建数组
这种方法先遍历原数组统计符合条件的元素个数,再创建对应长度的新数组,避免冗余:
public static int[] EliminateMultiples(int[] List, int Num) { // 第一步:统计需要保留的元素数量 int validCount = 0; for (int num : List) { if (num % Num != 0) { validCount++; } } // 第二步:创建对应长度的新数组 int[] filteredArray = new int[validCount]; int currentIndex = 0; // 第三步:填充新数组 for (int num : List) { if (num % Num != 0) { filteredArray[currentIndex] = num; currentIndex++; // 只有添加元素时才移动索引 } } // 输出过滤后的结果(遍历新数组长度,避免输出零) for (int num : filteredArray) { System.out.println(num); } return filteredArray; }
修复方案2:用ArrayList动态存储(更灵活)
如果不想手动统计数量,可以用ArrayList来动态添加符合条件的元素,最后再转成数组:
import java.util.ArrayList; import java.util.List; public static int[] EliminateMultiples(int[] List, int Num) { List<Integer> tempList = new ArrayList<>(); // 筛选元素加入动态列表 for (int num : List) { if (num % Num != 0) { tempList.add(num); } } // 把ArrayList转成int数组 int[] filteredArray = new int[tempList.size()]; for (int i = 0; i < tempList.size(); i++) { filteredArray[i] = tempList.get(i); } // 输出结果 for (int num : filteredArray) { System.out.println(num); } return filteredArray; }
测试一下
用你给出的输入数组int[] Eliminate = new int[]{1, 54, 20, 17, 60};,假设指定的Num是10,那么过滤后应该得到[1,54,17],两种方案都能正确输出这三个数,不会出现零值啦。
内容的提问来源于stack exchange,提问作者Sahib Saini
相关产品推荐
相关产品推荐

