NullPointerException при добавлении в BigDecimal - PullRequest
1 голос
/ 25 марта 2012
String[] toppings = new String[10];
BigDecimal toppingsPrice = null;

toppings[0] = req.getParameter("extraCheese");
toppings[1] = req.getParameter("moreTomatoes");
toppings[2] = req.getParameter("extraOnions");
// ...

for(int i = 0; i < toppings.length; i++) {
    if(toppings[i] != null) {
        toppingsPrice.add(new BigDecimal("0.99")); // <-- NPE is caused here.
        toppingsPrice = toppingsPrice.setScale(2, BigDecimal.ROUND_HALF_EVEN);
    }
}

Я получаю NullPointerException в приведенном выше коде при добавлении 0.99 к toppingsPrice.Я работаю с денежными значениями, поэтому я использовал BigDecimal.Что-то не так с тем, как я добавляю цену 0.99c?

Ответы [ 3 ]

7 голосов
/ 25 марта 2012

Вы устанавливаете toppingsPrice на ноль и никогда не меняете его, чтобы указывать на что-то:

    BigDecimal toppingsPrice = null;
    ...
    toppingsPrice.add(new BigDecimal("0.99"));

Вы имели в виду

BigDecimal toppingsPrice = new BigDecimal(0);
1 голос
/ 25 марта 2012

Если вы посмотрите на API, вы увидите, что:

add (BigDecimal augend)

Возвращает BigDecimal, значение которого (this + augend), а масштаб которого max (this.scale (), augend.scale ()).

1 голос
/ 25 марта 2012

Вам нужно инициализировать toppingsPrice

изменить эту строку

BigDecimal toppingsPrice = null;

до

BigDecimal toppingsPrice = new BigDecimal(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...