如何修改Java数组重复元素查找程序使其仅输出重复元素一次?
解决Java数组重复元素仅输出一次的问题
你现在的问题是原双层循环会把同一个重复元素打印好几次,比如数组里的9出现了6次,程序会反复输出9对吧?核心就是要记住哪些元素已经输出过,避免重复打印。下面给你两种简单的修改思路:
方法一:用集合记录已输出元素(最直观)
我们可以用HashSet当一个“小本子”,专门记已经打印过的重复元素。每次找到重复值时,先查这个“小本子”:如果没记过就打印,然后把元素记进去;如果已经有记录,直接跳过就行。
修改后的完整代码:
import java.util.HashSet; import java.util.Set; public class ArrayTest{ public static void main(String[] args) { int array[] = {32,3,3,4,5,6,88,98,9,9,9,9,9,9,1,2,3,4,5,6,4,3,7,7,8,8,88,88}; // 用来记录已经打印过的重复元素 Set<Integer> printedElements = new HashSet<>(); for(int i= 0;i<array.length-1;i++){ for(int j=i+1;j<array.length;j++){ if(array[i] == array[j] && i != j){ // 检查这个元素有没有被打印过 if(!printedElements.contains(array[j])){ System.out.println("重复元素:" + array[j]); printedElements.add(array[j]); } } } } } }
方法二:先排序再遍历(节省额外空间)
如果不想用额外的集合,我们可以先把数组排序,这样重复元素会紧紧挨在一起。然后遍历数组,只在第一次遇到连续重复的时候输出,之后的重复直接跳过就好。
修改后的代码:
import java.util.Arrays; public class ArrayTest{ public static void main(String[] args) { int array[] = {32,3,3,4,5,6,88,98,9,9,9,9,9,9,1,2,3,4,5,6,4,3,7,7,8,8,88,88}; // 先排序,让重复元素连续排列 Arrays.sort(array); // 记录上一个输出的重复元素,初始设为数组中不可能出现的值 int lastPrinted = Integer.MIN_VALUE; for(int i=1;i<array.length;i++){ if(array[i] == array[i-1] && array[i] != lastPrinted){ System.out.println("重复元素:" + array[i]); lastPrinted = array[i]; } } } }
两种方法的小说明:
- 方法一逻辑简单,不会改变原数组的顺序,但需要额外的集合空间存储已输出元素;
- 方法二不需要额外空间(仅用几个变量),但会改变原数组的顺序,如果要保留原数组,可以先复制一份再排序。
内容的提问来源于stack exchange,提问作者user8286771
相关产品推荐
相关产品推荐

