如何在整数数组中查找指定数字重复项,排查代码测试不通过问题
问题描述
- 需求说明:实现方法满足以下要求:
- 检查数字
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
相关产品推荐
相关产品推荐

