3

正常に動作しない単純なコードがあります。

このコードは、BigDecimalsの配列を追加して、array.lengthで除算し、平均を求めようとしています。ただし、アルゴリズムの最初のフェーズでは、配列を正しく(変数「sum」で)追加できません。

public BigDecimal getAverageHeight()
{
    BigDecimal sum = new BigDecimal(0);
    BigDecimal[] heights = getAllHeights();

    for (int a = 0; a < heights.length; a++)
    {
        sum.add(heights[a]);
        System.out.println("Height[" + a + "] = " + heights[a]);
        System.out.println("Sum = " + sum.setScale(2, BigDecimal.ROUND_HALF_UP));
    }        

    return sum.divide(new BigDecimal(heights.length));
}

出力は次のとおりです。

Height[0] = 24  
Sum = 0.00  
Height[1] = 24  
Sum = 0.00  
Height[2] = 24  
Sum = 0.00  
Height[3] = 26  
Sum = 0.00  
Height[4] = 26  
Sum = 0.00  
Height[5] = 26  
Sum = 0.00

単純なエラーだと思いますが、よろしくお願いします。

4

3 に答える 3

5

BigDecial.add() 合計を返しますが、変更はしませ。これを行う:

sum = sum.add(heights[a]);
于 2012-11-05T10:27:56.320 に答える
4

BigDecimalオブジェクトは不変であり、その値を変更するすべてのメソッドは新しいBigDecimalオブジェクトを返します。新しく作成されたオブジェクトには、変更された値が含まれています。

次のようなことをする必要があります:

sum = sum.add(heights[a]);

これはsetScale()anddivide()演算にも当てはまります

于 2012-11-05T10:27:58.900 に答える
1

sum の加算演算の結果値を変数 sum に代入します。

for (int a = 0; a < heights.length; a++)
    {
        sum = sum + heights[a];
        System.out.println("Height[" + a + "] = " + heights[a]);
        System.out.println("Sum = " + sum.setScale(2, BigDecimal.ROUND_HALF_UP));
    }        
于 2012-11-05T10:29:33.110 に答える