LoD uchun Java orqali BigDecimal ni qanday oshirish mumkin?

LoD uchun Java orqali BigDecimal ni qanday oshirish mumkin? Bu hozirda ishlayotgan kodlar va nima uchun u BigDecimal nusxalarini oshirmasligini tushunmayapman

package app;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class Test {
    private List ticketQuantity = new ArrayList<>();
    List 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();
    }
}

Nima sog'indim? someNumber [10, 10, 10, 10] ga teng keladigan umid qilaman, lekin keyin [0, 0, 0, 0] yoziladi :(

1
BigDecimal Immutable. Api o'qing.
qo'shib qo'ydi muallif Michael Markidis, manba
BigDecimal Immutable. Api o'qing.
qo'shib qo'ydi muallif Michael Markidis, manba

7 javoblar

BigDecimal represents:

Immutable, o'zboshimchalik bilan aniqlik bilan imzolangan o'nlik raqamlar

noyferrer"> o'zgarmaslik degan ma'noni anglatadi, siz misolni o'zgartira olmaysiz. add usuli yangi BigDecimal ni qaytaradi. Ro'yxatdagi qiymatni o'zgartirmoqchi bo'lsangiz, indeks bo'yicha loopdan o'tib, List.set kodini chaqirib, kodni o'zgartirish uchun BigDecimal.add kodi:

for (int i = 0; i < ticketQuantity.size(); i++) {
    ticketQuantity.set(i, ticketQuantity.get(i).add(someNumber.get(i)));
}
7
qo'shib qo'ydi
kod misollar bera olasizmi? Ammo keyin oldingi qiymatni oshirishni xohlayman, sozlash asosda yangi qiymat bilan yoziladi
qo'shib qo'ydi muallif densityx, manba

BigDecimal represents:

Immutable, o'zboshimchalik bilan aniqlik bilan imzolangan o'nlik raqamlar

noyferrer"> o'zgarmaslik degan ma'noni anglatadi, siz misolni o'zgartira olmaysiz. add usuli yangi BigDecimal ni qaytaradi. Ro'yxatdagi qiymatni o'zgartirmoqchi bo'lsangiz, indeks bo'yicha loopdan o'tib, List.set kodini chaqirib, kodni o'zgartirish uchun BigDecimal.add kodi:

for (int i = 0; i < ticketQuantity.size(); i++) {
    ticketQuantity.set(i, ticketQuantity.get(i).add(someNumber.get(i)));
}
7
qo'shib qo'ydi
kod misollar bera olasizmi? Ammo keyin oldingi qiymatni oshirishni xohlayman, sozlash asosda yangi qiymat bilan yoziladi
qo'shib qo'ydi muallif densityx, manba

Boshqa javobda aytilganidek add() usuli yangi BigDecimal kodini qaytaradi va BigDecimal tufayli asl nusxasini o'zgartirmaydi quyida aytib o'tish kerak,

int i = 0;
for (BigDecimal x : ticketQuantity) {
    x = x.add(new BigDecimal(someNumber.get(i)));
    ticketQuantity.set(i, x);
    i++;
}
1
qo'shib qo'ydi

add() usuli ro'yxatning oxirida yangi elementlar qo'shadi. Men ilgari qo'shgan dastlabki to'rtta qiymat haqida yozishga harakat qilyapman deb o'ylayman. shuning uchun foydalaning     set (int index, E element);

1
qo'shib qo'ydi
x ro'yxat emas
qo'shib qo'ydi muallif Michael Markidis, manba

add() usuli ro'yxatning oxirida yangi elementlar qo'shadi. Men ilgari qo'shgan dastlabki to'rtta qiymat haqida yozishga harakat qilyapman deb o'ylayman. shuning uchun foydalaning     set (int index, E element);

1
qo'shib qo'ydi
x ro'yxat emas
qo'shib qo'ydi muallif Michael Markidis, manba

Boshqalar ta'kidlaganidek, BigDecimal o'zgarmas sinfdir. BigDecimal # add usuli BigDecimal ning yana bir nusxasini qaytaradi, operand BigDecimal ob'ektini yangilamaydi. Ob'ektga erishish uchun quyidagi usulni qo'llashingiz mumkin:

public class Test {
    private List ticketQuantity = new ArrayList<>();
    List 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();
    }
}
0
qo'shib qo'ydi

Boshqalar ta'kidlaganidek, BigDecimal o'zgarmas sinfdir. BigDecimal # add usuli BigDecimal ning yana bir nusxasini qaytaradi, operand BigDecimal ob'ektini yangilamaydi. Ob'ektga erishish uchun quyidagi usulni qo'llashingiz mumkin:

public class Test {
    private List ticketQuantity = new ArrayList<>();
    List 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();
    }
}
0
qo'shib qo'ydi