You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java数组过滤倍数方法输出含零问题排查与解决求助

解决数组过滤后出现零值的问题

我明白你遇到的问题啦——你写的方法里新数组和原数组长度相同,没被赋值的位置默认是0,再加上索引处理的小错误,就导致输出里出现了多余的零。咱们一步步来修复它:

先看原代码的问题点

你的代码里有两个关键问题:

  1. 索引错误:NewListIndex++放在了if语句外面,不管当前元素是否被加入新数组,索引都会自增。这会导致符合条件的元素被存在不连续的位置,中间空出来的位置就是默认的0。
  2. 数组长度冗余:新数组初始化时用了原数组的长度,但实际符合条件的元素更少,多余的位置自然填充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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:32:06