查找数组中行的绝对值,然后在答案中输出最大值

时间:2018-04-08 15:40:06

标签: java arrays junit junit4 absolute-value

我目前需要仅使用绝对值在数组中添加所有行,然后在三个答案中找到最大值。

这就是我现在所拥有的:

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代码来测试它?

2 个答案:

答案 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()