返回 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 一个包含您计算的值的数组。不是用三个内部变量来保存总数(rowTotal
、row2Total
和 row3Total
),而是可以将这些变量组合到一个存储总数的数组中,然后 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 循环,它将计数输入到相应的数组键中。
这可能是一种非常糟糕的代码编写方式,但这里有一个程序可以计算每行的总数并将其全部打印在括号中。
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 一个包含您计算的值的数组。不是用三个内部变量来保存总数(rowTotal
、row2Total
和 row3Total
),而是可以将这些变量组合到一个存储总数的数组中,然后 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 循环,它将计数输入到相应的数组键中。