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

Java查找整型数组重复值时嵌套循环重复计数问题如何解决

数组重复值判定与定位实现方案

现有代码问题说明

  • 比对逻辑重复:内层循环j从0开始全量遍历,(f=a,j=b)和(f=b,j=a)会对同一对元素重复判定,导致重复计数
  • 判定条件逻辑错误:当前判断的是下标f是否等于j且等于10,长度为4的数组下标最大值为3,永远触发不了该条件,且需要比对的是数组存储的元素值而非下标
  • 运算符使用不规范:条件中的&是按位与,此处逻辑判断场景应该使用逻辑与&&

优化后的嵌套循环实现(无重复计数)

内层循环从f+1开始遍历,每一对元素仅比对一次,不会出现重复计数问题,同时可定位重复取值:

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

public class CheckDuplicate {
    public static void main(String[] args) {
        int[] bonusGame = {/* 替换为你的数组元素 */};
        // 存储已经找到的重复值,避免同一个重复值多次输出
        Set<Integer> duplicateValues = new HashSet<>();
        for (int f = 0; f < bonusGame.length; ++f) {
            // 内层从f的下一个下标开始,避免重复比对同一对元素
            for (int j = f + 1; j < bonusGame.length; ++j) {
                // 比对两个下标对应的元素值是否相等
                if (bonusGame[f] == bonusGame[j]) {
                    // 仅当该重复值没有被记录过的时候输出
                    if (!duplicateValues.contains(bonusGame[f])) {
                        System.out.println("找到重复取值:" + bonusGame[f]);
                        // 匹配业务需求:出现值为10的重复时触发中奖提示
                        if (bonusGame[f] == 10) {
                            System.out.println("You won 10 Euro");
                        }
                        duplicateValues.add(bonusGame[f]);
                    }
                }
            }
        }

        // 无重复值的场景提示
        if (duplicateValues.isEmpty()) {
            System.out.println("数组中无重复值");
        }
    }
}

低时间复杂度可选方案

如果后续数组长度扩容,可采用单次遍历的哈希表方案,时间复杂度为O(n):

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

public class CheckDuplicate {
    public static void main(String[] args) {
        int[] bonusGame = {/* 替换为你的数组元素 */};
        Set<Integer> tempSet = new HashSet<>();
        Set<Integer> duplicateValues = new HashSet<>();
        for (int num : bonusGame) {
            // add方法返回false说明元素已存在,即为重复值
            if (!tempSet.add(num)) {
                duplicateValues.add(num);
            }
        }
        // 处理重复值逻辑
        for (int duplicate : duplicateValues) {
            System.out.println("找到重复取值:" + duplicate);
            if (duplicate == 10) {
                System.out.println("You won 10 Euro");
            }
        }
        if (duplicateValues.isEmpty()) {
            System.out.println("数组中无重复值");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:36:07