簡體   English   中英

如何通過for循環在Java中遞增BigDecimal?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM