2017-02-23 35 views
-1

forループからforループを使ってBigDecimalをインクリメントする方法はありますか? これは私が現在実行していると、それはforループからforループを使って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(); 
    } 
} 

私は何を逃したBigDecimalのインスタンスをインクリメントしませんなぜ私は理解していないコードのですか?私はsomeNumber would equals to [10, 10, 10, 10]が、その後[0, 0, 0, 0]が印刷されることを期待しています:(

+0

BigDecimalは不変です。 APIを読んでください。 –

答えて

7

BigDecimalは表し:

不変、任意精度の符号付き小数

immutabilityあなたは、インスタンスを変更することはできませんを意味します。 addメソッドは、の新しいBigDecimalを返します。リストの値を変更する場合は、インデックスをループして01を呼び出す必要があります交換する指標とBigDecimal.addの結果には:

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

私はコード例を教えていただけますか?しかし、私は以前の値をインクリメントしたい、セットは基本的にそれを新しい値で上書きする – densityx

-1

add()メソッドは、リストの末尾に新しい要素を追加します。あなたが以前に追加した最初の4つの値を上書きしようとしていると思います。だから set(int index、E element);を使用してください。

+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(); 
    } 
} 
関連する問題