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

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);
}

测试验证

用你提供的测试用例运行:

  1. 输入original = {1,0}、match = {1,0}:返回的两个未匹配数组均为空,符合预期
  2. 输入original = {1,0,1,0,0}、match = {1,0,1,0,0}:返回的两个未匹配数组均为空,符合预期
  3. 输入original = {1,0,0}、match = {1,0,0}:返回的两个未匹配数组均为空,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:21:02