繁体   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