2017-02-23 346 views
-1

如何通过for循环在Java中增加BigDecimal? 这是我当前正在运行的代码,我不明白为什么它会不会增加BigDecimal的情况下如何通过for循环在Java中增加BigDecimal?

package app; 

import java.math.BigDecimal; 
import java.util.ArrayList; 
import java.util.List; 

public class Test { 
    private List<BigDecimal> ticketQuantity = new ArrayList<>(); 
    List<String> someNumber = new ArrayList<>(); 

    public Test() { 

     ticketQuantity.add(new BigDecimal(0)); 
     ticketQuantity.add(new BigDecimal(0)); 
     ticketQuantity.add(new BigDecimal(0)); 
     ticketQuantity.add(new BigDecimal(0)); 

     someNumber.add("10"); 
     someNumber.add("10"); 
     someNumber.add("10"); 
     someNumber.add("10"); 
     System.out.println(ticketQuantity); 

     int i = 0; 
     for (BigDecimal x : ticketQuantity) { 
      x.add(new BigDecimal(someNumber.get(i))); 
      i++; 
     } 

     System.out.println(ticketQuantity); 
    } 

    public static void main(String[] args) { 
     new Test(); 
    } 
} 

我错过了什么?我希望someNumber would equals to [10, 10, 10, 10]但随后[0, 0, 0, 0]印:(

+0

BigDecimal是不可变的。阅读api。 –

回答

7

BigDecimal表示:

不可变的,任意精度的有符号十进制数

immutability意味着你不能修改一个实例。 add方法将返回一个新的BigDecimal。如果你想改变列表中的值,你将不得不通过索引来遍历循环,并调用List.set与更换指数和BigDecimal.add结果:

for (int i = 0; i < ticketQuantity.size(); i++) { 
    ticketQuantity.set(i, ticketQuantity.get(i).add(someNumber.get(i))); 
} 
+0

你能给我一些代码示例吗?但是,然后我想增加以前的值,设置将基本上覆盖它与新值 – densityx

-1

add()方法增加了在列表的末尾的新元素。我认为你正试图覆盖你之前添加的前四个值。所以用 set(int index,E元素);

+0

x不是列表 –

1

正如在其他的答案解释,add()方法将返回一个新BigDecimal,不会修改原始实例由于BigDecimal是不可变的,所以你需要下面做,

int i = 0; 
for (BigDecimal x : ticketQuantity) { 
    x = x.add(new BigDecimal(someNumber.get(i))); 
    ticketQuantity.set(i, x); 
    i++; 
} 
0

正如其他人所指出的BigDecimal是一个不可变的类。方法BigDecimal#add实际上返回另一个实例BigDecimal,不更新操作数BigDecimal对象。要达到您的目的,您可以尝试以下方法:

public class Test { 
    private List<BigDecimal> ticketQuantity = new ArrayList<>(); 
    List<String> someNumber = new ArrayList<>(); 

    public Test() { 

     someNumber.add("10"); 
     someNumber.add("10"); 
     someNumber.add("10"); 
     someNumber.add("10"); 
     System.out.println(ticketQuantity); 

     for (String x : someNumber) { 
      ticketQuantity.add(new BigDecimal(x)); 
     } 

     System.out.println(ticketQuantity); 
    } 

    public static void main(String[] args) { 
     new Test(); 
    } 
}