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

如何在整数数组中查找指定数字重复项,排查代码测试不通过问题

问题描述
  • 需求说明:实现方法满足以下要求:
    • 检查数字n在方法内部存储的整数数组中是否出现超过1次
    • 若n在数组中存在重复则返回true,否则返回false

最初编写的代码

for (int i = 0; i < myYears.length; i++) {
        for (int j = 0; j < myYears.length; j++) {
                      // got the duplicate element
                 System.out.println("Got dublicate");
                 return true;     
        }
    }
    return false;

问题:运行后无论输入是什么,都会输出"Got dublicate"。

第一次修改后的完整代码

package main;

public class Array1 {

    public static void main(String[] args) {
        findMoreThanOneInArray(1231);      // 测试用例预期返回true
    }  // end main

    /*
     * 该方法用于检查数字'n'
     * 是否在方法内部存储的整数数组中出现超过1次
     * 
     * 若n在数组中存在重复则返回true,否则返回false
     */
    private static boolean findMoreThanOneInArray(int n) {
        boolean result = false;     // 搜索结果默认设为false
        int[] myYears = { 2176, 2311, 2472, 2131, 2046, 2209, 2473, 2364, 2116, 2462, 2405, 2032, 2226, 2223, 2065, 2336, 2372, 2084, 2000, 2074, 2263, 2092, 2485, 2229, 2222, 2369, 2130, 2381, 2487, 2271, 2432, 2011, 2264, 2328, 2251, 2002, 2036, 2410, 2166, 2022, 2064, 2168, 2122, 2409, 2100, 2276, 2361, 2042, 2387, 2211, 2479, 2327, 2044, 2319, 2308, 2265, 2368, 2021, 2325, 2395, 2256, 2086, 2449, 2171, 2098, 2117, 2468, 2338, 2214, 2314, 2204, 2073, 2045, 2295, 2020, 2447, 2233, 2060, 2094, 2383, 2457, 2260, 2224, 2105, 2261, 2405, 2472, 2477, 2253, 2175, 2107, 2441, 2379, 2027, 2386, 2090, 2496, 2280, 2285, 2117 };

        /*
         * 请在此处编写代码
         * 若n在数组中存在重复则返回true,否则返回false
         */
        for (int i = 0; i < myYears.length; i++) {
            for (int j = i + 1 ; j < myYears.length; j++) {
                if (myYears[i] == myYears[j]) {
                     System.out.println("Got dublicate");
                     return true;
                 }
            }
        }
        return false;
    } // end of method
} // end class

第二次修改后的核心逻辑代码

for (int i = 0; i < myYears.length; i++) {
        if (myYears[i] == n) {
             System.out.println("Got dublicate");
             return true;
         }
}
System.out.println("false");
return false;

第二次修改后的代码通过了大部分测试用例,仅在n=2222的场景下测试不通过。


问题原因

第二次修改的代码逻辑不符合需求:需求要求n出现超过1次才返回true,但你写的代码只要匹配到第一个等于n的元素就直接返回true,相当于只要n出现至少1次就返回true。
而方法内置的myYears数组里,2222仅出现了1次,按照需求应该返回false,但你的代码匹配到唯一的2222就直接返回true,自然不符合测试预期。

正确实现参考

统计n出现的次数,次数≥2时直接返回true即可:

int count = 0;
for (int num : myYears) {
    if (num == n) {
        count++;
        if (count >= 2) {
            System.out.println("Got duplicate");
            return true;
        }
    }
}
System.out.println("false");
return false;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:10