Java 返回非null的内容

Java 返回非null的内容,java,junit,junit4,Java,Junit,Junit4,这可能是编写代码的一种非常糟糕的方法,但这里有一个程序,它计算每行的总数,并将其全部打印在括号中 public static int[] rowsSums(int[][] array) { int[][] numArray = { {3, -1, 4, 0}, {5, 9, -2, 6}, {5, 3, 7,

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

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;

}
是的,我知道我的输出不应该为null,因为JUnit讨厌它。在不使JUnit失败或出现错误的情况下,我还可以返回什么变量

我必须保持原样

公共静态int[]行SSUM(int[]]数组){

int[][]努马里={


更新:无论我怎么尝试,JUnit总是会出现此错误

如果您的方法设计为只打印消息而不返回任何内容,则应将其返回类型声明为
void

public static void rowsSums(int[][] array) { ...
然后删除
return
语句


但是,根据您的测试用例,您似乎希望返回一个包含计算值的数组。而不是使用三个内部变量来保存总计(
rowTotal
row2Total
,以及
row3Total
),这些变量可以组合到一个数组中,在该数组中存储总计,然后返回。

如果您的方法设计为只打印消息而不返回任何内容,则应将其返回类型声明为
void

public static void rowsSums(int[][] array) { ...
然后删除
return
语句


但是,根据您的测试用例,您似乎希望返回一个包含计算值的数组。而不是使用三个内部变量来保存总计(
rowTotal
row2Total
,以及
row3Total
),这些变量可以组合到一个数组中,在该数组中存储总数,然后返回。

我认为您的方法应该返回执行的计算,而不仅仅是打印消息,否则您将无法清楚地测试您的方法。
此外,方法名称应该是动词/动作,而不是常用名称。
所以
sum()
会更清晰

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

public static int[] sum(int[][] array) {
  ...     
    return new int[] {rowTotal,  row2Total, row3Total};
}
在你的测试中:

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

我认为您的方法应该返回执行的计算结果,而不仅仅是打印一条消息,否则您将无法清楚地测试您的方法。
此外,方法名称应该是动词/动作,而不是常用名称。
所以
sum()
会更清晰

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

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}
};
公共静态int[]行SSUM(int[]]数组){
int[]sum=新的int[array.length];
对于(int i=0;i
int[]numArray={
{3, -1,  4,  0},
{5,  9, -2,  6},
{5,  3,  7, -8}
};
公共静态int[]行SSUM(int[]]数组){
int[]sum=新的int[array.length];

对于(int i=0;i要返回包含总和的
int[]
,您需要

return new int[] { rowTotal, row2Total, row3Total };
那你也可以断言

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

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

要返回包含和的
int[]
,您可以这样做

return new int[] { rowTotal, row2Total, row3Total };
那你也可以断言

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

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

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

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

若您将返回数组作为结果,那个么您将能够在jUnit测试中使用它,并将预期结果与实际结果进行比较

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

为什么要将int[][]数组传递给该方法,但实际上从未对其进行任何操作?…我假设您希望使用传递的数组结构来计算它的每个数组(行)。您也不应该将输出与函数混合。您应该返回字符串,然后在主方法中打印它。正如@bill the Lizard所说,您希望有一个数组,其中包含行的值,然后只返回int[]包含行计数的数组。然后在当前循环中有一个for循环,该循环将计数输入到相应的数组键中。

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

为什么不将字符串作为输出返回?如果您的方法应该返回一个
int[]
,我希望是一个包含和的数组。“是的,我知道我的输出不应该为null,因为JUnit讨厌它。”-你能详细说明一下吗?“我还可以返回什么变量而不使JUnit失败或抛出错误?“-适合您的返回类型的所有内容。您不应该在函数中打印。将行总数作为整数数组返回,就像您已经拥有的那样,然后在方法外部打印。为什么不将字符串作为输出返回?如果您的方法应该返回
int[]
,我希望是一个包含总和的数组。”。“是的,我知道我的输出不应该为null,因为JUnit讨厌它。”-你能详细说明一下吗?“我还可以返回什么变量而不会使JUnit失败或出现错误?”-符合你的返回类型的所有内容。你不应该在函数中打印。像你一样,以整数数组的形式返回行总数