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

Java中实现void方法替换int数组重复项为0的问题求解

问题分析与修正

你的代码核心问题有两个:

  1. 错误的判断条件:j+1 < array.length完全多余,它导致数组的最后一个元素永远无法被替换为0——哪怕它是重复项。比如输入{2,2}时,当j=1(最后一个索引),j+1=2等于数组长度2,不满足条件,所以不会修改这个位置的值。

  2. 逻辑顺序缺陷:外层循环遍历到i=0时,会把array[0]改成0;当i=1时,temp取的是array[1]=2,此时内层循环遍历j=0时,array[j]已经是0,和temp不匹配,而j=1又被上述条件跳过,最终导致第二个2无法被替换。

修正方案(符合你需求的实现)

如果你的需求是:只要元素出现次数超过1次,所有该元素的位置都替换为0(比如{2,2}输出{0,0}),可以用以下两种实现方式:

方式一:用哈希表统计次数(简洁高效)

import java.util.HashMap;
import java.util.Map;

public static void removeDuplicates(int[] array) {
    // 统计每个元素的出现次数
    Map<Integer, Integer> countMap = new HashMap<>();
    for (int num : array) {
        countMap.put(num, countMap.getOrDefault(num, 0) + 1);
    }
    // 遍历数组,将出现多次的元素替换为0
    for (int i = 0; i < array.length; i++) {
        if (countMap.get(array[i]) > 1) {
            array[i] = 0;
        }
    }
}

方式二:不用额外集合(双重循环标记重复值)

如果你不想引入集合类,也可以先标记所有重复的元素值,再统一替换:

import java.util.HashSet;
import java.util.Set;

public static void removeDuplicates(int[] array) {
    Set<Integer> duplicateNums = new HashSet<>();
    // 第一遍遍历,找出所有重复的元素值
    for (int i = 0; i < array.length; i++) {
        int current = array[i];
        // 检查当前元素后面是否有重复
        for (int j = i + 1; j < array.length; j++) {
            if (array[j] == current) {
                duplicateNums.add(current);
                break; // 找到重复就标记,无需继续检查
            }
        }
    }
    // 第二遍遍历,替换重复元素为0
    for (int i = 0; i < array.length; i++) {
        if (duplicateNums.contains(array[i])) {
            array[i] = 0;
        }
    }
}

这两种方式都能正确处理{2,2}的情况,输出{0,0},同时满足void方法修改原数组的要求。

内容的提问来源于stack exchange,提问作者A_K_A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:07:28