Java实现10个整数去重功能运行结果异常排查问询
代码运行异常原因分析
- 直接原因:唯一值判断的计数条件写错
你需要验证当前第i位元素和前面的i个元素(下标范围0~i-1,共i个元素)全部不重复,所有比较都不相等时,count的值应该等于i,但你的判断条件写为count == i-1。
以你输入的1234567891为例,i=1(对应元素2)时,前面只有下标0的元素1,比较后不等count值为1,此时判断1 == 0(i-1=0)条件不成立,所以2不会被追加到结果中,后续所有i>=1的元素都无法满足判断条件,最终结果只有第一个元素1。 - 潜在逻辑漏洞:现有去重逻辑冗余且有判错风险
你当前的逻辑是只要和前序某一位元素不等就累加count,就算存在重复元素,只要其他位不等count仍会累加,极端场景下可能出现误判。更合理的逻辑是只要找到一个和当前元素相等的前序值,就直接标记为重复、跳出内层循环,无需继续比较剩余元素。
修正后可正常运行的代码
//setup Scanner input = new Scanner(System.in); String text = input.nextLine(); text = text.replaceAll("\\s",""); //remove all spaces int[] intDigits = new int[10]; //turn the string into an int array for (int i = 0; i < 10; i++){ intDigits[i] = text.charAt(i) - '0'; } input.close(); StringBuilder pl = new StringBuilder(); // 遍历所有元素判断是否唯一 for (int i = 0; i < 10; i++) { boolean isUnique = true; // 和前序所有元素比较 for (int j = 0; j < i; j++) { if (intDigits[i] == intDigits[j]) { isUnique = false; break; // 找到重复直接跳出,无需继续比较 } } if (isUnique) { pl.append(intDigits[i]).append(" "); } } System.out.println("\n\npl: " + pl.toString().trim());
输入1234567891时,上述代码输出结果为pl: 1 2 3 4 5 6 7 8 9,符合需求。
内容的提问来源于stack exchange,提问作者aiden redmond
相关产品推荐
相关产品推荐

