Java:简单的BigDecimal逻辑错误

Java:简单的BigDecimal逻辑错误,java,bigdecimal,Java,Bigdecimal,我有一段简单的代码,它的行为不正常 这段代码试图添加一个bigdecimal数组,然后除以array.length以找到平均值。但是,算法的第一阶段无法正确地将数组相加(在变量“sum”中) 我确信这是一个简单的错误,但我已经厌倦了处理这个问题,提前谢谢。返回总和,但不会改变它。这样做: sum = sum.add(heights[a]); 对象是不可变的,其所有修改其值的方法都返回一个新的BigDecimal对象。新创建的对象包含修改的值 您需要这样做: sum = sum.add(heig

我有一段简单的代码,它的行为不正常

这段代码试图添加一个bigdecimal数组,然后除以array.length以找到平均值。但是,算法的第一阶段无法正确地将数组相加(在变量“sum”中)

我确信这是一个简单的错误,但我已经厌倦了处理这个问题,提前谢谢。

返回总和,但不会改变它。这样做:

sum = sum.add(heights[a]);
对象是不可变的,其所有修改其值的方法都返回一个新的
BigDecimal
对象。新创建的对象包含修改的值

您需要这样做:

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

这也适用于
setScale()
divide()
操作

将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));
    }        
for(int a=0;a
ole不可变值类问题。。。是的,这是新玩家的陷阱,我们程序员都是新玩家。。。不断地开始,偶尔当我们获得经验时。叹气。为了便于将来参考,您的问题可以通过阅读Javadoc来解决。
sum = sum.add(heights[a]);
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));
    }