




该教程详解如何实现一个不返回新数组、仅原地修改输入数组的void方法,将所有重复出现的整数(包括首次出现的位置)统一替换为0,确保逻辑正确且避免遗漏首个重复项。
在Java中,若需原地处理整型数组——即不创建新数组、不返回值(void方法),同时将所有重复元素(含首次出现位置)全部替换为 0,关键在于正确识别“重复”的定义:只要某数值在数组中出现超过一次,其所有出现位置都应被置为 0。
原始代码的问题在于内层循环从 j = 0 开始,导致每次比较都会把 array[i] 自身(即 array[j] == temp 且 j == i 时)也设为 0,造成错误覆盖;更严重的是,它未区分“首次出现”与“后续重复”,无法保证所有重复值的全部实例均被归零。
✅ 正确思路是:

以下是修正后的完整实现:
public static void removeDuplicates(int[] array) {
if (array == null || array.length <= 1) {
return; // 空数组或单元素无需处理
}
for (int i = 0; i < array.length - 1; i++) {
int temp = array[i];
for (int j = i + 1; j < array.length; j++) {
if (array[j] == temp) {
array[j] = 0;
array[i] = 0; // 首次出现也归零 → 确保所有重复实例均被清除
}
}
}
}? 使用示例:
int[] arr = {2, 2, 3, 3, 4, 5, 2};
removeDuplicates(arr);
System.out.println(Arrays.toString(arr)); // 输出: [0, 0, 0, 0, 4, 5, 0]解释:2 出现三次 → 全部变 0;3 出现两次 → 全部变 0;4 和 5 各出现一次 → 保留原值。
⚠️ 注意事项:
总结:核心在于理解“重复”的全局性,并通过 i+1 起始的内层扫描+即时首项归零,确保逻辑闭环。此方案简洁、符合约束,且可直接集成到现有代码中。