簡體   English   中英

為什么我的ArrayList不添加對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM