Java查找两数组间不匹配整数的方法存在Bug,求定位原因
Bug定位与修复
核心问题1:循环索引未重置
你在匹配到对应位置元素相等、截断数组之后,没有将循环索引j重置为0,导致截断后的新数组没有从头开始匹配。
以original = {1,0}、match = {1,0}的场景为例:
- 初始循环
j=0,两个数组索引0的元素相等,截断后两个数组都变为[0],此时j自增为1 - 下一轮循环判断
j < match.length,此时match长度为1,1<1不成立,循环直接退出,剩下的[0]没有完成匹配,就被当作未匹配元素返回了。
核心问题2:双分支for循环逻辑冗余且易出错
你分开写了两个if分支分别处理match长度大于/小于等于original_rest的场景,逻辑重复,且第一个分支处理后数组长度变化,可能触发第二个分支的异常执行。
其他冗余问题
subarray类定义的泛型<T>没有实际作用,因为方法返回值是固定的int[],属于无效代码,可直接删除。
修正后的核心代码
仅需要修改match_sequence方法即可,逻辑改用while循环,匹配成功后重置索引:
public static results match_sequence(int[] original_rest,int[] match) { int j = 0; // 只要两个数组都还有元素就继续匹配 while (j < original_rest.length && j < match.length) { if (original_rest[j] == match[j]) { // 匹配成功,截断两个数组,去掉前面匹配的部分 match = subarray.subArray(match,j+1,match.length-1); original_rest = subarray.subArray(original_rest,j+1,original_rest.length-1); // 重置索引,从新数组的头部开始匹配 j = 0; } else { // 遇到不相等元素,跳出循环 System.out.println("This is not an interweave of two sub elements!"); break; } } return new results(match,original_rest); }
测试验证
用你提供的测试用例运行:
- 输入
original = {1,0}、match = {1,0}:返回的两个未匹配数组均为空,符合预期 - 输入
original = {1,0,1,0,0}、match = {1,0,1,0,0}:返回的两个未匹配数组均为空,符合预期 - 输入
original = {1,0,0}、match = {1,0,0}:返回的两个未匹配数组均为空,符合预期
内容的提问来源于stack exchange,提问作者hw21
相关产品推荐
相关产品推荐

