具有所有负数的数组中的最大行和

时间:2017-06-22 08:21:44

标签: java arrays logic

如果每行的所有rowSum值均为正值,则下面的代码可以正常工作,但如果所有rowSum值都为负数(检查否定> 0并且每次都失败),则代码会失败并给出答案为0.请建议处理这个负数情况。 maxSum应该用什么来初始化?

public static void findMaxRow(double[][] a){  
double maxSum = 0;
int maxRow = 0;

for (int row = 0; row < a.length; row++){

    double rowSum = 0;

    for (int column = 0; column < a[row].length; column++){
        rowSum += a[row][column];
    }

    if (rowSum > maxSum){
        maxSum = rowSum;
        maxRow = row;
    }
}}}

2 个答案:

答案 0 :(得分:4)

您的初始值

double maxSum = 0;

如果实际最大值为负,则maxSum保持为0。

将初始值更改为Double.NEGATIVE_INFINITY

double maxSum = Double.NEGATIVE_INFINITY;

答案 1 :(得分:2)

您的算法失败,因为包含至少一个负数的一组数字的总和可能低于零。

一种强有力的方法是将计算行和的函数部分划分为函数rowSum

然后,在调用站点,您可以将maxSum初始化为第一行的总和,然后继续for循环中的其他行。您还可以根据具体要求有效地处理零行情况。

另一种方法是将maxSum的类型更改为Double,并将其初始化为null,然后调整将新总和与{中的当前值进行比较的代码{1}}。这种方式非常优雅地处理零行数。