我在Java中有一个BigDecimal数组,我想计算该数组所有元素的总和。我正在尝试以下代码:
public static void main(String[] args) {
BigDecimal[] res = {
new BigDecimal("20849603980134001723930671666823555245252804609722")
,new BigDecimal("53503534226472524250874054075591789781264330331690")};
BigDecimal sum = BigDecimal.ZERO;
//BigDecimal sum = new BigDecimal("0");
for(BigDecimal s : res) sum.add(s);
System.out.println(sum);
}
我的问题是sum变量为零:
run:
0
BUILD SUCCESSFUL (total time: 0 seconds)
我用两种方法创建了sum var,但是两种方法都给出相同的零值。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Java中,BigDecimal
的加法操作是不可变的,这意味着每次调用add
方法时,它并不会修改原始的BigDecimal
对象,而是返回一个新的BigDecimal
对象表示加法的结果。因此,在你的循环中,你需要将加法的结果赋值回sum
变量,否则sum
不会改变。
正确的代码应该是这样的:
public static void main(String[] args) {
BigDecimal[] res = {
new BigDecimal("20849603980134001723930671666823555245252804609722"),
new BigDecimal("53503534226472524250874054075591789781264330331690")};
BigDecimal sum = BigDecimal.ZERO;
for(BigDecimal s : res) {
sum = sum.add(s); // 注意这里将加法结果重新赋值给sum
}
System.out.println(sum);
}
这样修改后,sum
会在每次循环中累加数组中的每个BigDecimal
值,最终输出正确的总和。