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

Java合并两个任意类型二维数组的代码错误排查

二维任意类型数组合并方法错误修复

核心错误定位

你的代码存在2处关键的取值逻辑错误,直接导致输出嵌套数组不符合预期:

  1. 拼接impl数组行元素时取值错误
    你在外层循环已经拿到了impl当前遍历到的一维行对象objects,但添加元素时写的是impl[j]——impl是整个二维数组,impl[j]取到的是第j个一维数组对象,不是单个元素,这就是输出里出现嵌套[1]的根本原因,正确取值应为当前行的元素objects[j]。
  2. 拼接dataProvider数组行元素时取值错误
    内层循环添加元素时写的是value,value是dataProvider当前遍历到的一整行一维数组对象,不是单个元素,因此会把整行[12, 6.0]作为单个元素塞入列表,正确取值应为当前行的元素value[k]。

另外你写的list.clear()属于冗余代码:每次进入双层循环都会新建一个ArrayList对象,赋值给结果数组后局部变量会自动出作用域被回收,不需要手动清空。

修正代码

方案1:保留原有下标遍历结构,仅修正错误取值

public Object[][] merge(Object[][] impl, Object[][] dataProvider) {
    int n = dataProvider.length;
    int m = impl.length;

    Object[][] merged = new Object[m * n][];
    int countLines = 0;

    for (Object[] objects : impl) {
        for (Object[] value : dataProvider) {
            List<Object> list = new ArrayList<>();

            for (int j = 0; j < objects.length; j++) {
                list.add(j, objects[j]); // 修正:取当前行的单个元素,而非整个二维数组的行对象
            }

            for (int k = 0; k < value.length; k++) {
                list.add(list.size(), value[k]); // 修正:取当前行的单个元素,而非整行数组
            }

            merged[countLines] = list.toArray();
            countLines++;
        }
    }
    return merged;
}

方案2:用增强for循环简化写法(更不易出现下标/对象引用错误)

public Object[][] merge(Object[][] impl, Object[][] dataProvider) {
    int totalRows = impl.length * dataProvider.length;
    Object[][] merged = new Object[totalRows][];
    int rowIndex = 0;

    for (Object[] implRow : impl) {
        for (Object[] dataRow : dataProvider) {
            List<Object> currentRow = new ArrayList<>();
            // 拼接impl当前行所有元素
            for (Object ele : implRow) {
                currentRow.add(ele);
            }
            // 拼接dataProvider当前行所有元素
            for (Object ele : dataRow) {
                currentRow.add(ele);
            }
            merged[rowIndex++] = currentRow.toArray();
        }
    }
    return merged;
}

结果验证

用你提供的测试用例运行上述代码,将得到完全符合预期的结果:

Object[][] result = new Object[][]{
    {1, 12, 6.0},
    {1, 6, 3.0},
    {2, 12, 6.0},
    {2, 6, 3.0},
    {3, 12, 6.0},
    {3, 6, 3.0}
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:09:20