2012-03-25 9 views
0
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); 
    } 
} 

Ich bin ein NullPointerException in dem obigen Code bekommen, wenn 0.99 zu toppingsPrice hinzufügen. Ich arbeite mit Geldwerten, also habe ich BigDecimal verwendet. Stimmt etwas nicht damit, wie ich den 0.99c-Preis addiere?Nullpointer wenn zu BigDecimal Zugabe

+1

Wo initialisierst du 'toppingsPrice' mit etwas anderem als einem' null'? – Mat

+3

Also was sagt die Stack-Traceback ??? In welcher Zeile scheitern Sie und welches Objekt kann in dieser Zeile null sein? – paulsm4

+1

Welche Linie? Fügen Sie den tatsächlichen Fehler und die Stapelverfolgung hinzu (und geben Sie, wenn möglich, an, wo im Code diese Zeile steht). –

Antwort

6

Sie setzen toppingsPrice auf null und es nie zu etwas Punkt zu ändern:

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

Meinten Sie

BigDecimal toppingsPrice = new BigDecimal(0); 
+0

Ich dachte 'toppingsPrice.add (new BigDecimal (" 0,99 "));' fügte hinzu? – Dan

+3

@Dan: Bevor Sie Operationen für ein Objekt aufrufen können, müssen Sie diese zuerst im Speicher zuordnen. Sie fügen 0,99 zu einem nicht vorhandenen Objekt hinzu. – Tudor

+3

Besser: 'BigDecimal toppingsPrice = BigDecimal.ZERO;'. – Jesper

0

Sie müssen toppingsPrice initialisieren

Änderung dieser Linie

BigDecimal toppingsPrice = null; 

zu

BigDecimal toppingsPrice = new BigDecimal(0); 
0

Wenn Sie einen Blick auf API haben würden Sie sehen, dass würde:

add (BigDecimal augend)

Gibt eine BigDecimal, deren Wert (das + augend) und deren Skala ist max (this.scale(), augend.scale()).