[英]How can I increment BigDecimal in java through for loop?
如何通過for循環在Java中遞增BigDecimal? 這是我當前正在運行的代碼,但我不明白為什么它不會增加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, 0, 0, 0]
:(
BigDecimal
表示:
不可變,任意精度的帶符號十進制數字
不變性意味着您無法修改實例。 add
方法將返回一個新的 BigDecimal
。 如果要更改列表中的值,則必須按索引循環,並使用要替換的索引和BigDecimal.add
的結果調用List.set
:
for (int i = 0; i < ticketQuantity.size(); i++) {
ticketQuantity.set(i, ticketQuantity.get(i).add(someNumber.get(i)));
}
如其他答案所述, add()
方法將返回一個新的BigDecimal
並且由於BigDecimal
是不可變的,因此不會修改原始實例,因此您需要執行以下操作,
int i = 0;
for (BigDecimal x : ticketQuantity) {
x = x.add(new BigDecimal(someNumber.get(i)));
ticketQuantity.set(i, x);
i++;
}
正如其他人所說,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();
}
}
add()方法將新元素添加到列表的末尾。 我認為您正在嘗試覆蓋之前添加的前四個值。 所以使用set(int index,E element);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.