这可能是编写代码的一种非常糟糕的方式,但这是一个计算每行总数并将其全部打印在括号中的程序。
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));
}
是的,我知道我的输出不应该为null,因为JUnit讨厌它。在不使JUnit失败或吐出错误的情况下,我可以返回什么其他变量?
我必须保留这些
public static int [] rowsSums(int [] [] array){
int [] [] numArray = {
更新:无论我尝试什么,JUnit总是会出现此错误PrntScrn of Error
答案 0 :(得分:1)
如果您的方法仅用于打印消息而不返回任何内容,则应将其返回类型声明为javascript:(function() {
var pasteText = document.getElementById("mergeFields-input-text").select();
document.execCommand("Paste");
tempAlert("PASTED SUBJECT", 500);
function tempAlert(msg, duration) {
var el = document.createElement("div");
el.setAttribute("style","position:absolute;top:2%;left:45%;background-color:yellow;");
el.innerHTML = msg;
document.body.appendChild(el);
setTimeout(function(){
el.parentNode.removeChild(el);
}, duration
);
}
})();
。
void
然后只需删除public static void rowsSums(int[][] array) { ...
语句。
但是,根据您的测试用例,您似乎想要返回一个包含您计算的值的数组。这些变量可以组合成一个存储总数的数组,然后返回。而不是让三个内部变量保存总数(return
,rowTotal
和row2Total
)。
答案 1 :(得分:1)
要返回包含总和的python -m http.server
,您可以
int[]
那是你可以断言的东西
return new int[] { rowTotal, row2Total, row3Total };
请注意,最好将计算和输出分开,即应将assertArrayEquals(i, Exercise2.rowsSums(numArray));
移动到另一个接受返回数组作为参数的函数。
答案 2 :(得分:0)
我认为您的方法应该返回执行的计算,而不仅仅是打印消息,否则您将无法清楚地测试方法。
除了方法名称应该是动词/动作而不是通用名称
所以sum()
会更清楚。
您可以返回方法中每行的sum数组,并在单元测试中断言结果:
public static int[] sum(int[][] array) {
...
return new int[] {rowTotal, row2Total, row3Total};
}
在你的测试中:
int[] sumExpected = ...
Assert.assertArrayEquals(sumExpected, Exercise2.sum(numArray));
答案 3 :(得分:0)
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);
答案 4 :(得分:0)
如果您将返回数组,那么您将能够在jUnit测试中使用它并将预期结果与实际值进行比较。
System.out.println("(" + rowTotal + "," + row2Total + "," + row3Total + ")");
int [] result = new int[3];
result[0] = rowTotal;
result[1] = row2Total;
result[2] = row3Total;
return result;
答案 5 :(得分:0)
为什么要将int [] []数组传递给方法,但实际上根本不会对它做任何事情?...我假设你想要使用你传递的数组结构来计算每个它的数组(行)。您也不应该将输出与功能混合在一起。您应该返回String,然后在main方法中打印它。正如@ bill-the-Lizard所说,你想拥有一个数组,其中包含行的值,然后你将返回一个int []数组,其中包含行的计数。然后,您将在当前的循环中有一个for循环,它将计数输入到相应的数组键中。