[英]Why isn't my ArrayList adding an object?
我是編碼的新手,我不太確定為什么會發生此錯誤。 嘗試將對象添加到ArrayList時收到“ java.lang.NullPointerException”。
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
您要在構造函數中重新聲明cart
變量,因此要初始化本地List
,而cart
成員仍為null。
更改
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>();
}
在您的構造函數中,此行:
ArrayList<Item> cart = new ArrayList<Item>();
cart = new ArrayList<Item>();
您沒有初始化類的成員變量cart
,而是聲明了一個新的局部變量來隱藏該成員變量。 成員變量保持為null
,以便在addToCart
調用add
時,會得到NullPointerException
。
在第二行中,您只是在重新初始化本地變量。 成員變量仍然保持為null
。
而是執行以下操作來初始化成員變量:
cart = new ArrayList<Item>();
刪除聲明和初始化本地變量的行。
您在此處重新定義列表:
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
}
你聲明了兩個變量
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
ArrayList<Item> cart = new ArrayList<Item>(); // local in constructor
中的ArrayList<Item> cart = new ArrayList<Item>(); // local in constructor
刪除此行
構造函數的局部變量cart
隱藏該字段。 因此,您的cart
字段未初始化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.