如何修复Java中eliminateDuplicates方法里的-1问题?
解决移除重复元素并剔除-1的问题
你的思路方向是对的——把重复元素标记成-1,但现在需要把这些标记过的元素剔除,返回一个只装不重复值的新数组。按照你听到的建议,我们分几步修改eliminateDuplicates方法:
修改步骤
- 统计有效元素数量:遍历标记后的数组,数出所有不等于-1的元素个数(记为
count),这个数就是新数组的长度。 - 创建新数组:用
count作为长度创建新数组list2,刚好能装下所有不重复的元素。 - 填充新数组:再次遍历原数组,把所有非-1的元素依次放进新数组。
- 返回新数组:最后返回这个新数组,替代原来的数组。
修改后的完整代码
import java.util.Scanner; public class Lab09 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("Enter ten numbers: "); int[] num = new int[10]; for (int i = 0; i < num.length; i++) { num[i] = s.nextInt(); } num = eliminateDuplicates(num); System.out.print("The distinct numbers are: "); for (int i = 0; i < num.length; i++) { System.out.print(num[i] + " "); } s.close(); } public static int[] eliminateDuplicates(int[] list) { // 保留你原来的标记逻辑,新增跳过已标记元素的判断 for (int i = 0; i < list.length; i++) { if (list[i] == -1) { continue; // 跳过已经被标记为重复的元素,避免无效检查 } for (int v = i + 1; v < list.length; v++) { if (list[i] == list[v]) { list[v] = -1; } } } // 统计不重复元素的数量 int count = 0; for (int num : list) { if (num != -1) { count++; } } // 创建新数组并填充有效元素 int[] list2 = new int[count]; int index = 0; for (int num : list) { if (num != -1) { list2[index++] = num; } } return list2; } }
额外说明
- 新增的
if (list[i] == -1) continue;是为了优化:如果某个元素已经被标记为重复(-1),就不用再拿它和后面的元素比较了,减少不必要的循环。 - 新数组的长度完全匹配不重复元素的数量,所以输出时只会打印有效元素,不会再出现-1。
内容的提问来源于stack exchange,提问作者alana
相关产品推荐
相关产品推荐

