我目前需要仅使用绝对值在数组中添加所有行,然后在三个答案中找到最大值。
这就是我现在所拥有的:
public static int maxRowAbsSum(int[][] array) {
int[][] maxRowValue = {
{3, -1, 4, 0},
{5, 9, -2, 6},
{5, 3, 7, -8}
};
int maxRow = 0;
int indexofMaxRow = 0;
for (int column = 0; column < maxRowValue[0].length; column++) {
maxRow += maxRowValue[0][column];
}
for (int row = 1; row < maxRowValue.length; row++) {
int totalOfRow = 0;
for (int column = 0; column < maxRowValue[row].length; column++){
totalOfRow += maxRowValue[row][column];
if (totalOfRow > maxRow) {
maxRow = totalOfRow;
indexofMaxRow = row;
}
}
System.out.println("Row " + indexofMaxRow + " has the sum of " + maxRow);
}
return indexofMaxRow;
}
但是这只返回索引行1总计而不使用绝对值。
更新:如何使用assertArrayEquals编写JUnit代码来测试它?
答案 0 :(得分:1)
您应该在访问行中的所有元素后得到总和,并且分别计算第一行是多余的:
int maxRow = 0;
int indexofMaxRow = 0;
for (int row = 0; row < maxRowValue.length; row++) {
int totalOfRow = 0;
for (int column = 0; column < maxRowValue[row].length; column++){
if (maxRowValue[row][column] > 0) {
totalOfRow += maxRowValue[row][column];
} else {
totalOfRow -= maxRowValue[row][column];
}
}
if (totalOfRow > maxRow) {
maxRow = totalOfRow;
indexofMaxRow = row;
}
}
System.out.println("Row " + indexofMaxRow + " has the sum of " + maxRow);
return indexofMaxRow;
答案 1 :(得分:1)
您的代码是正确的。只是一个小小的改变。
1)由于您需要绝对值,请使用foo.t(bar, baz)
函数添加值。
2)行:t(foo, bar, baz)
;这将显示CURRENT MAXIMUM ROW的索引。仅当下一行的值更大时,索引才会更改。第3行的总和是&lt;第二排。因此,在这种情况下索引不会更新。所以你在两个循环中得到相同的输出!这个例子证明了它:{3,-1,4,0},{5,9,-2,6},{5,3,7,9}输出:第1行的总和为18行2具有总和24 2
Math.abs()