2017-06-22 58 views
1

當所有的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; 
    } 
}}} 
+1

那麼,如果他們都是消極的,他們的總和是多少?這個總和是否超過'maxSum'? –

回答

4

你的初始值

double maxSum = 0; 

導致maxSum保持0,如果實際最大爲負。

更改初始值Double.NEGATIVE_INFINITY

double maxSum = Double.NEGATIVE_INFINITY; 
+0

是的,這是有效的,但我*討厭*這樣做:這只是粗略的。個人看法,而且你的方法在Java中完全定義好,它要求IEEE754用於'double';有一個upvote。 – Bathsheba

+0

這工作。謝謝。在接受之前,我仍然會等待更多的建議。 –

2

因爲一組包含至少一個負數的總和可以是零下你的算法失敗。

一個可靠的方法是將計算行總和的函數的部分劃分爲函數rowSum

然後,在呼叫站點,您可以將maxSum初始化爲第一行的總和,然後在for循環中繼續處理其他行。您也可以根據具體要求有效處理零行情況。

另一種方法是對的maxSum類型更改爲Double,並將其初始化到null,和調整該新的總和進行比較,以在maxSum的電流值的代碼。這種方式相當優雅地處理零行數的情況。

+0

爲此,第一行的總和需要分別計算嗎?這不是一個開銷嗎? –

+0

完全沒有:您不會多次評估任何行的總和。 – Bathsheba

相關問題