我在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,但两种方法都给出了相同的零值。
答案 0 :(得分:4)
更改
for(BigDecimal s : res) sum.add(s);
到
for(BigDecimal s : res) {
sum = sum.add(s);
}
BigDecimal
是一个不可变的类,因此add()
返回一个新的BigDecimal
实例,您必须将其分配给变量。
答案 1 :(得分:1)
BigDecimal对象是不可变的。 add方法返回一个包含总和的新BigDecimal对象。您会浪费掉这笔款项,并继续使用未修改的初始值。
答案 2 :(得分:1)
如果您查看here,将会看到 files={
'input.txt':'randy',
'output.txt':'randy',
'code.py':'stan'
}
k=files.keys()
newfiles={value:key for key,value in files.items()}
emptylist=[]
for key in k:
if key not in newfiles.values():
missfile=key
valuetoadd=files[missfile]
emptylist.append(newfiles[valuetoadd])
emptylist.append(missfile)
newfiles[valuetoadd]=emptylist
print(newfiles)
的{{1}}方法不会更新实例的值,而是返回一个新值。请尝试将add
的结果重新影响到变量BigDecimal
:
add
答案 3 :(得分:0)
请尝试以下操作,而不是sum.add(s);
sum = sum.add(s); //在循环内
答案 4 :(得分:0)
您还可以像这样对数组进行归约:
public static void main(String[] args) {
BigDecimal[] res = {
new BigDecimal("20849603980134001723930671666823555245252804609722"),
new BigDecimal("53503534226472524250874054075591789781264330331690")
};
// use a stream to sum up all the values
BigDecimal sum = Arrays.stream(res)
.reduce(BigDecimal.ZERO, (a, b) -> a.add(b));
// and print the result
System.out.println(sum.toString());
}
减少的结果是
74353138206606525974804725742415345026517134941412