为什么我的ArrayList没有添加对象?

时间:2014-12-10 07:41:39

标签: java arraylist

我是编码的新手,我不太清楚为什么会出现这种错误。我得到了一个" 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

5 个答案:

答案 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字段未初始化