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;iint[]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失败或出现错误?”-符合你的返回类型的所有内容。你不应该在函数中打印。像你一样,以整数数组的形式返回行总数