2017-02-23 42 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(); 
    } 
}