如何仅将不存在的数值添加到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
相关产品推荐
相关产品推荐

