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

使用JUnit assertArrayEquals测试maxRowAbsSum方法时出错,请求排查修正

问题排查与代码修复

先看看你这段代码里的几个明显问题,这肯定是导致JUnit测试失败的关键原因:

核心问题列表

  • 完全忽略方法参数:你的方法接收了int[][] array参数,但整个逻辑里根本没用到它,反而硬编码了一个maxRowValue数组。这意味着不管你测试时传入什么测试用例,方法都只会处理这个固定数组,测试肯定通不过。
  • 代码逻辑不完整:在if (totalOfRow > maxRow)的代码块里只写了maxR...,明显没写完——你需要在这里更新记录的最大绝对值和maxRow,以及对应的行索引indexofMaxRow。
  • 绝对值计算冗余且易出错:你通过判断元素正负来累加绝对值,其实用Math.abs()方法可以一步到位,代码更简洁,还能避免手动判断可能出现的逻辑错误。
  • 返回值与测试不匹配:你的方法声明返回int,但你用assertArrayEquals来测试——这个断言是用来比较数组的,说明你的测试期望方法返回一个数组(比如绝对值和最大的那一行),所以方法的返回类型可能需要调整为int[]。

修复后的完整代码

假设你的需求是:接收一个二维数组,计算每一行的元素绝对值之和,返回绝对值和最大的那一行数组。修复后的代码如下:

public static int[] maxRowAbsSum(int[][] array) {
    // 处理空数组或空行的边界情况
    if (array == null || array.length == 0) {
        return new int[0];
    }

    int maxAbsSum = 0;
    int indexOfMaxRow = 0;

    for (int row = 0; row < array.length; row++) {
        int currentRowAbsSum = 0;
        // 处理行为空的情况
        if (array[row] == null) {
            continue;
        }
        for (int column = 0; column < array[row].length; column++) {
            // 用Math.abs直接计算绝对值,简洁可靠
            currentRowAbsSum += Math.abs(array[row][column]);
        }

        // 更新最大绝对值和及对应的行索引
        if (currentRowAbsSum > maxAbsSum) {
            maxAbsSum = currentRowAbsSum;
            indexOfMaxRow = row;
        }
    }

    // 返回绝对值和最大的那一行
    return array[indexOfMaxRow];
}

如果你的需求是返回最大的绝对值和(而不是行数组),那方法返回类型保持int,最后返回maxAbsSum即可,同时测试时要改用assertEquals而不是assertArrayEquals。

对应的JUnit测试示例

比如测试你原来的硬编码数组,测试代码可以这样写:

import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;

public class ArrayTest {
    @Test
    public void testMaxRowAbsSum() {
        int[][] testArray = {
            {3, -1, 4, 0},
            {5, 9, -2, 6},
            {5, 3, 7, -8}
        };
        // 计算各行绝对值和:8, 22, 23 → 第三行是最大的
        int[] expected = {5, 3, 7, -8};
        int[] actual = YourClassName.maxRowAbsSum(testArray);
        assertArrayEquals(expected, actual);
    }
}

额外说明

  • 我添加了对空数组、空行的边界处理,避免出现NullPointerException,让方法更健壮。
  • 用Math.abs()简化了绝对值计算,减少了出错概率。
  • 确保方法使用传入的array参数,而不是硬编码的内部数组,这样测试用例才能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:08:19