我是编码的新手,我不太清楚为什么会出现这种错误。我得到了一个" java.lang.NullPointerException"当我尝试将对象添加到我的ArrayList时。
import java.text.NumberFormat;
import java.util.ArrayList;
public class ShoppingCart3
{
private int itemCount;
private double totalPrice;
private ArrayList<Item> cart;
public ShoppingCart3()
{
itemCount = 0;
totalPrice = 0.0;
ArrayList<Item> cart = new ArrayList<Item>();
cart = new ArrayList<Item>();
}
public void addToCart(String itemName, double price, int quantity)
{
Item x = new Item(itemName, price, quantity);
cart.add(x); **<-----Error Happens Here**
totalPrice += (price * quantity);
}
之后有更多代码,但我不认为这是一个问题。非常感谢你的帮助,对不起,如果这是一个我看不到的非常愚蠢的错误。 :P
答案 0 :(得分:4)
您正在构造函数中重新声明cart
变量,因此您正在初始化本地List
,而您的cart
成员仍然为空。
更改
public ShoppingCart3()
{
itemCount = 0;
totalPrice = 0.0;
ArrayList<Item> cart = new ArrayList<Item>();
cart = new ArrayList<Item>();
}
到
public ShoppingCart3()
{
itemCount = 0;
totalPrice = 0.0;
cart = new ArrayList<Item>();
}
答案 1 :(得分:1)
在你的构造函数中,在这一行:
ArrayList<Item> cart = new ArrayList<Item>();
cart = new ArrayList<Item>();
你不初始化类的成员变量cart
,你声明一个隐藏成员变量的新的局部变量。成员变量保留null
,因此当您在add
中调用addToCart
时,您会获得NullPointerException
。
在第二行中,您只是重新初始化本地变量。成员变量仍然保留null
。
这样做是为了初始化成员变量:
cart = new ArrayList<Item>();
删除声明并初始化局部变量的行。
答案 2 :(得分:1)
你在这里重新定义你的名单:
public ShoppingCart3()
{
itemCount = 0;
totalPrice = 0.0;
ArrayList<Item> cart = new ArrayList<Item>(); // redefine
cart = new ArrayList<Item>(); // initialieze redefined list
}
尝试:
public ShoppingCart3()
{
itemCount = 0;
totalPrice = 0.0;
// ArrayList<Item> cart = new ArrayList<Item>(); // redefine
cart = new ArrayList<Item>();
}
或
public ShoppingCart3()
{
itemCount = 0;
totalPrice = 0.0;
ArrayList<Item> cart = new ArrayList<Item>(); // redefine
this.cart = new ArrayList<Item>(); // initialieze list from instance
}
答案 3 :(得分:1)
你宣布了两个变量
private ArrayList<Item> cart;
一个是本地的,你启动局部变量而不是全局类
ArrayList<Item> cart = new ArrayList<Item>();
cart = new ArrayList<Item>();
问题是:
public class ShoppingCart3
{
private int itemCount;
private double totalPrice;
private ArrayList<Item> cart; // Global for your class
public ShoppingCart3()
{
itemCount = 0;
totalPrice = 0.0;
ArrayList<Item> cart = new ArrayList<Item>(); // local in constructor
cart = new ArrayList<Item>(); // you initiate this
}
ArrayList<Item> cart = new ArrayList<Item>(); // local in constructor
删除此行
答案 4 :(得分:0)
构造函数的局部变量cart
隐藏了该字段。因此,您的cart
字段未初始化