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

如何仅将不存在的数值添加到vector中?Java代码问题修复求助

Java数组去重输入逻辑bug修复

问题根因

你的代码出现该问题的核心是内层校验循环的逻辑漏洞:当检测到重复、用户输入新值后,没有重置循环变量j重新从头校验,导致新输入的值不会再和已经遍历过的前序元素做重复判断。
比如你提到的测试场景:

  • 索引0存1,索引1存2,给索引2输入第一个1时,j=0检测到重复,提示重新输入
  • 你再次输入1后,代码会继续执行j++,后续j会遍历1、2的位置,这两个位置的元素和新输入的1都不重复,循环直接结束,就出现了重复值被放行的问题。

除此之外还有一个隐藏问题:你现在内层循环遍历了整个数组的长度,索引大于i的位置都是未赋值的初始值0,不仅没必要校验,还可能出现和用户输入的0误判重复的问题。

修复后代码

public void readVector(int[] vector) {
    int i = 0;
    for (i = 0; i < vector.length; i++) {
        System.out.print("Input a number for position " + i + ": ");
        int input = s.nextInt();
        boolean isDuplicate = false;
        // 仅校验已经填充过的前i个位置即可
        for (int j = 0; j < i; j++) {
            if (input == vector[j]) {
                isDuplicate = true;
                break;
            }
        }
        // 如果重复就循环要求重新输入,直到拿到合法值
        while (isDuplicate) {
            System.out.print("Value already exists in vector. Input a valid number: ");
            input = s.nextInt();
            // 重新校验新输入的值
            isDuplicate = false;
            for (int j = 0; j < i; j++) {
                if (input == vector[j]) {
                    isDuplicate = true;
                    break;
                }
            }
        }
        vector[i] = input;
    }
}

修复逻辑说明

  • 先接收输入值,单独做重复校验,确认无重复后再写入数组,避免中间值污染数组
  • 重复校验仅遍历已经完成填充的前i个位置,性能更高也不会出现和初始值误判的问题
  • 用while循环处理重复输入的场景,每次新输入都会从头执行重复校验,不会出现漏检问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:06:00