Java 添加到BigDecimal时出现NullPointerException String[]toppings=新字符串[10]; BigDecimal toppingsPrice=null; 浇头[0]=要求的getParameter(“extraCheese”); 浇头[1]=所需的getParameter(“更多番茄”); 浇头[2]=所需的getParameter(“额外洋葱”); // ... 对于(int i=0;i那么堆栈回溯会说什么呢???你在哪一行失败,哪一个对象在那一行可以为空?哪一行?包括实际的错误和堆栈跟踪(如果可能的话,指出那一行在代码中的位置)。在以后的问题中,请不要在代码中发布太多噪音。我还建议你自己尝试SSCCE(即,可以通过main()方法执行的最小但完整的工作代码)。通过这种方式,您只需将其复制粘贴到此处,所有人都会清楚,您还可以排除Servlet API是问题的原因。add方法不是静态的,因此需要执行BigDecimal的实例。我认为ToppingPrice.add(new BigDecimal(“0.99”))是在添加吗?@Dan:在调用对象上的操作之前,必须先在内存中分配它。您正在向一个不存在的对象添加0.99。更好的方法是:BigDecimal-toppingprice=BigDecimal.ZERO;。我想toppingprice.add(新的BigDecimal(“0.99”));是否添加到它?@Dan:在调用对象上的操作之前,必须先在内存中分配它。您正在向不存在的对象添加0.99。更好的方法是:BigDecimal toppingsPrice=BigDecimal.ZERO;。

Java 添加到BigDecimal时出现NullPointerException String[]toppings=新字符串[10]; BigDecimal toppingsPrice=null; 浇头[0]=要求的getParameter(“extraCheese”); 浇头[1]=所需的getParameter(“更多番茄”); 浇头[2]=所需的getParameter(“额外洋葱”); // ... 对于(int i=0;i那么堆栈回溯会说什么呢???你在哪一行失败,哪一个对象在那一行可以为空?哪一行?包括实际的错误和堆栈跟踪(如果可能的话,指出那一行在代码中的位置)。在以后的问题中,请不要在代码中发布太多噪音。我还建议你自己尝试SSCCE(即,可以通过main()方法执行的最小但完整的工作代码)。通过这种方式,您只需将其复制粘贴到此处,所有人都会清楚,您还可以排除Servlet API是问题的原因。add方法不是静态的,因此需要执行BigDecimal的实例。我认为ToppingPrice.add(new BigDecimal(“0.99”))是在添加吗?@Dan:在调用对象上的操作之前,必须先在内存中分配它。您正在向一个不存在的对象添加0.99。更好的方法是:BigDecimal-toppingprice=BigDecimal.ZERO;。我想toppingprice.add(新的BigDecimal(“0.99”));是否添加到它?@Dan:在调用对象上的操作之前,必须先在内存中分配它。您正在向不存在的对象添加0.99。更好的方法是:BigDecimal toppingsPrice=BigDecimal.ZERO;。,java,nullpointerexception,Java,Nullpointerexception,您正在将toppingprice设置为null,并且从不将其更改为指向某个对象: String[] toppings = new String[10]; BigDecimal toppingsPrice = null; toppings[0] = req.getParameter("extraCheese"); toppings[1] = req.getParameter("moreTomatoes"); toppings[2] = req.getParameter("extraOnions"

您正在将
toppingprice
设置为null,并且从不将其更改为指向某个对象:

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);
    }
}
你是说

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

您正在将
toppingsPrice
设置为null,并且从不将其更改为指向某个对象:

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);
    }
}
你是说

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

您需要初始化toppingprice

换行

BigDecimal toppingsPrice = new BigDecimal(0);


您需要初始化toppingprice

换行

BigDecimal toppingsPrice = new BigDecimal(0);


如果您想了解API,您会看到:

添加(BigDecimal)


返回一个BigDecimal,其值为(this+augend),其刻度为max(this.scale(),augend.scale())。

如果您查看API,您会看到:

添加(BigDecimal)


返回一个BigDecimal,其值为(this+augend),其比例为max(this.scale(),augend.scale()).

您在哪里初始化
toppingsPrice
,而不是使用
null
?那么堆栈回溯说明了什么?您在哪一行失败,哪一个对象在那一行可以为null?哪一行?包括实际错误和堆栈跟踪(如果可能,指出该行在代码中的位置)。在以后的问题中,请不要在代码中发布太多的噪音。我还建议您自己尝试SSCCE(即,您可以通过
main()
方法执行的最小但完整的工作代码)。通过这种方式,您只需将其复制粘贴到此处,所有人都会很清楚,您还可以排除Servlet API是问题的原因。add方法不是静态的,因此需要执行BigDecimal的实例。您在哪里使用
null
以外的任何东西初始化
ToppingPrice
>那么堆栈回溯会说什么呢???你在哪一行失败,哪一个对象在那一行可以为空?哪一行?包括实际的错误和堆栈跟踪(如果可能的话,指出那一行在代码中的位置)。在以后的问题中,请不要在代码中发布太多噪音。我还建议你自己尝试SSCCE(即,可以通过
main()
方法执行的最小但完整的工作代码)。通过这种方式,您只需将其复制粘贴到此处,所有人都会清楚,您还可以排除Servlet API是问题的原因。add方法不是静态的,因此需要执行BigDecimal的实例。我认为
ToppingPrice.add(new BigDecimal(“0.99”))
是在添加吗?@Dan:在调用对象上的操作之前,必须先在内存中分配它。您正在向一个不存在的对象添加0.99。更好的方法是:
BigDecimal-toppingprice=BigDecimal.ZERO;
。我想
toppingprice.add(新的BigDecimal(“0.99”));
是否添加到它?@Dan:在调用对象上的操作之前,必须先在内存中分配它。您正在向不存在的对象添加0.99。更好的方法是:
BigDecimal toppingsPrice=BigDecimal.ZERO;