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

Java查找数组重复值时重复输出,如何仅输出唯一重复值

问题根因

你原来的双重循环逻辑会对每一组重复的元素配对都触发打印:拿测试样例[1,2,2,2,3]举例,值为2的元素下标是1、2、3,循环会匹配到(1,2)、(1,3)、(2,3)三组配对,因此触发三次打印。

修改方案

我们可以新增一个集合存储已经输出过的重复值,避免重复打印,修改后的完整代码如下:

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

public class duplicateValue {
    // 方法名修改为更贴合功能的findDuplicate,原reverse命名不符合功能语义
    public static void findDuplicate(int[] a)
    {
        // 存储已经打印过的重复值,避免重复输出
        Set<Integer> printedDuplicates = new HashSet<>();
        for(int i=0;i<a.length;i++)
        {
            for(int j=i+1;j<a.length;j++) {
                if(a[i]==a[j])
                {
                    // 仅当该重复值未被打印过才输出
                    if (!printedDuplicates.contains(a[i])) {
                        System.out.println(a[i] + " is duplicated");
                        printedDuplicates.add(a[i]);
                    }
                    // 找到重复后直接跳出内层循环,避免后续无意义匹配
                    break;
                }
            }
        }
    }
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("enter the size of array");
        int n=sc.nextInt();
        System.out.println("enter the "+n+" no. of elements");
        int[] a=new int[n];
        for(int i=0;i<n;i++)
        {
            a[i]=sc.nextInt();
        }
        findDuplicate(a);
        sc.close();
    }
}
修改点说明
  • 新增HashSet类型的printedDuplicates变量,用来记录已经输出过的重复值
  • 匹配到重复值后先判断是否已经在集合中,不存在才打印并加入集合
  • 匹配到重复值后直接跳出内层循环,减少不必要的遍历
  • 补充了Scanner资源的关闭操作,避免资源泄漏
  • 修正了方法命名,原reverse语义和功能不符,改为findDuplicate
  • 修正了输入提示的文本格式,把"+n+"no.改为"+n+" no.更易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:04