如果每行的所有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;
}
}}}
答案 0 :(得分:4)
您的初始值
double maxSum = 0;
如果实际最大值为负,则maxSum
保持为0。
将初始值更改为Double.NEGATIVE_INFINITY
:
double maxSum = Double.NEGATIVE_INFINITY;
答案 1 :(得分:2)
您的算法失败,因为包含至少一个负数的一组数字的总和可能低于零。
一种强有力的方法是将计算行和的函数部分划分为函数rowSum
。
然后,在调用站点,您可以将maxSum
初始化为第一行的总和,然后继续for
循环中的其他行。您还可以根据具体要求有效地处理零行情况。
另一种方法是将maxSum
的类型更改为Double
,并将其初始化为null
,然后调整将新总和与{中的当前值进行比较的代码{1}}。这种方式非常优雅地处理零行数。