返回 null 以外的内容

Returning something other than null

这可能是一种非常糟糕的代码编写方式,但这里有一个程序可以计算每行的总数并将其全部打印在括号中。

public static int[] rowsSums(int[][] array) {
    int[][] numArray = {

                            {3, -1,  4,  0},
                            {5,  9, -2,  6},
                            {5,  3,  7, -8}

                       };
    int rowTotal = 0;
    int row2Total = 0;
    int row3Total = 0;
    for (int i = 0; i < numArray[0].length; i++) {
        rowTotal += numArray[0][i];
        row2Total += numArray[1][i]; 
        row3Total += numArray[2][i];
    }

    System.out.println("(" + rowTotal + "," + row2Total + "," + row3Total + ")");
    return null;

}

没有 JUnit 的输出是:

(6,18,7)

我正在用 JUnit 和我的代码对此进行测试:

@Test
public void rowsSums() {

    int [] i = new int [] {6, 18, 7};
    assertEquals(i, Exercise2.rowsSums(numArray));
}

是的,我知道我的输出不应该为空,因为 JUnit 讨厌它。在不使 JUnit 失败或吐出错误的情况下,我可以 return 还有什么其他变量?

我必须保持原样

public static int[] rowsSums(int[][] array) {

int[][] numArray = {

更新: 无论我尝试什么,JUnit 总是出现这个错误 PrntScrn of Error

如果您的方法旨在仅打印一条消息而不是 return 任何内容,则您应该将其 return 类型声明为 void.

public static void rowsSums(int[][] array) { ...

然后删除 return 语句。

但是,根据您的测试用例,您似乎想要 return 一个包含您计算的值的数组。不是用三个内部变量来保存总数(rowTotalrow2Totalrow3Total),而是可以将这些变量组合到一个存储总数的数组中,然后 return编辑

我认为您的方法应该 return 执行计算,而不仅仅是打印一条消息,否则您将没有明确的方法来测试您的方法。
此外,方法名称应该是 verbs/actions 而不是通用名称。
所以sum()会更清楚。

您可以 return 在您的方法中计算每一行的总和数组,并在您的单元测试中断言结果:

public static int[] sum(int[][] array) {
  ...     
    return new int[] {rowTotal,  row2Total, row3Total};
}

在你的测试中:

int[] sumExpected = ...
Assert.assertArrayEquals(sumExpected, Exercise2.sum(numArray));
int[][] numArray = {

            {3, -1,  4,  0},
            {5,  9, -2,  6},
            {5,  3,  7, -8}

};

public static int[] rowsSums(int[][] array) {

    int[] sum =  new int[array.length];

    for (int i=0;i<sum.length; i++)
        sum[i] = 0;

    for (int i = 0; i < sum.length; i++) {
        for(int j=0; j< array[i].length; j++)
        sum[i] += array[i][j];
    }

    return sum;

}

int[] result = rowsSums(numArray);

要 return 包含总和的 int[],你会做

return new int[] { rowTotal, row2Total, row3Total };

那你也可以断言

assertArrayEquals(i, Exercise2.rowsSums(numArray));

请注意,最好将计算和输出分开,即您应该将 System.out.println 移动到另一个接受 returned 数组作为参数的函数。

如果您将 return 数组作为结果,您将能够在您的 jUnit 测试中使用它并将预期结果与实际结果进行比较。

System.out.println("(" + rowTotal + "," + row2Total + "," + row3Total + ")");
int [] result = new int[3];
result[0] = rowTotal;
result[1] = row2Total;
result[2] = row3Total;
return result;

为什么你将 int[][] 数组传递给方法,但实际上根本不对它做任何事情?...我假设你想使用你传递的数组结构,以便计算它的每个数组(行)。您也不应该将输出与函数混合使用。你应该 return 字符串,然后在你的主要方法中打印它。正如@bill-the-Lizard 所说,您想要一个数组来保存行的值,然后您只需 return 一个包含行计数的 int[] 数组。然后,您将在当前循环中有一个 for 循环,它将计数输入到相应的数组键中。