在我的代码中有一个'空指针异常',但我似乎无法理解为什么。我已将对象添加到构造函数中的ArrayList中。当我尝试运行该方法时,我得到一个空指针异常。任何帮助将不胜感激。
私人ArrayList产品;
//PRODUCTS CLASS CONSTRUCTOR
Products(){
ArrayList<ProductsClass> products = new ArrayList<ProductsClass>(); //Declaration and instantiation of ArrayList
products.add(new ProductsClass("Bread", 0.65));
products.add(new ProductsClass("Milk", 2.00));
products.add(new ProductsClass("Pasta", 3.35));
products.add(new ProductsClass("Milk chocolate bar", 0.75));
products.add(new ProductsClass("Dark Rum", 25.00));
ProductsClass p = products.get(3);
System.out.print(p.getItemName() + ""); //Testing to see if works#
System.out.print("");
System.out.print(" " + p.getItemPrice());
}
public void findMatchingItem() {
for (ProductsClass product : products) {
System.out.print(product);
}
}
答案 0 :(得分:1)
您需要在构造函数之外声明产品ArrayList,使其成为实例变量。
private ArrayList<ProductsClass> products
Products(){
products = new ArrayList<ProductsClass>(); //Declaration and instantiation of ArrayList
products.add(new ProductsClass("Bread", 0.65));
products.add(new ProductsClass("Milk", 2.00));
products.add(new ProductsClass("Pasta", 3.35));
products.add(new ProductsClass("Milk chocolate bar", 0.75));
products.add(new ProductsClass("Dark Rum", 25.00));
ProductsClass p = products.get(3);
System.out.print(p.getItemName() + ""); //Testing to see if works#
System.out.print("");
System.out.print(" " + p.getItemPrice());
}
答案 1 :(得分:1)
在
Products(){
ArrayList<ProductsClass> products = new ArrayList<ProductsClass>();
...
}
你在构造函数中创建一个ArrayList。 这意味着,产品仅在构造函数的一侧有效 - &GT;范围是一个函数,因此它不能在函数之外使用
在构造函数之外定义arraylist。
或者:
ArrayList<ProductsClass> products = new ArrayList<ProductsClass>();
Products() {
... //rest here
}
或
ArrayList<ProductsClass> products;
Products() {
products = new ArrayList<ProductsClass>();
... //rest here
}
您还应该正常地为构造函数提供可见性。 又名:
public Products() {
...
}
答案 2 :(得分:0)
您在构造函数中定义了ArrayList。但是你正在访问一个方法。访问此方法并不是全局的。将其移动为全局变量
ArrayList<ProductsClass> products;
Products(){
products = new ArrayList<ProductsClass>(); //Declaration and instantiation of ArrayList
products.add(new ProductsClass("Bread", 0.65));
products.add(new ProductsClass("Milk", 2.00));
products.add(new ProductsClass("Pasta", 3.35));
products.add(new ProductsClass("Milk chocolate bar", 0.75));
products.add(new ProductsClass("Dark Rum", 25.00));
ProductsClass p = products.get(3);
System.out.print(p.getItemName() + ""); //Testing to see if works#
System.out.print("");
System.out.print(" " + p.getItemPrice());
}
public void findMatchingItem() {
for (ProductsClass product : products) {
System.out.print(product);
}
}
答案 3 :(得分:0)
您的代码是如何编译的?您是否在构造函数之外声明了成员变量产品:
ArrayList<ProductsClass> products;
在方法/循环内创建的任何引用都是活动的/只能在方法/循环内部访问。所以正在发生的事情是,即使创建了产品对象,也会初始化并赋值,这个和成员变量产品是两个不同的东西。成员变量未初始化,因此抛出空指针异常。
您需要将产品列表声明为成员变量。并在构造函数中初始化它。