我的for循环中的空指针异常
Null Pointer Exception in my for loop
在我的代码中有一个 'Null Pointer Exception' 但我似乎不明白为什么。我已将对象添加到构造函数中的 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);
}
}
您需要在构造函数之外声明产品 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());
}
您在构造函数中定义了 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);
}
}
在
Products(){
ArrayList<ProductsClass> products = new ArrayList<ProductsClass>();
...
}
您正在构造函数中创建一个 ArrayList。
这意味着,产品仅在构造函数中有效
-> 范围是一个函数,因此它在函数之外不可用
在构造函数之外定义数组列表。
任一:
ArrayList<ProductsClass> products = new ArrayList<ProductsClass>();
Products() {
... //rest here
}
或
ArrayList<ProductsClass> products;
Products() {
products = new ArrayList<ProductsClass>();
... //rest here
}
您通常还应该为构造函数设置可见性。
又名:
public Products() {
...
}
您的代码编译情况如何?您是否在构造函数外部声明了成员变量 products 为:
ArrayList<ProductsClass> products;
在 method/loop 内创建的任何引用 alive/can 只有在 method/loop 内才能访问。所以发生的事情是,即使产品对象被创建、初始化和赋值,这和成员变量产品是两个不同的东西。成员变量未初始化,抛出空指针异常
您需要将产品列表声明为成员变量。并在构造函数中初始化它。
在我的代码中有一个 'Null Pointer Exception' 但我似乎不明白为什么。我已将对象添加到构造函数中的 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);
}
}
您需要在构造函数之外声明产品 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());
}
您在构造函数中定义了 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);
}
}
在
Products(){
ArrayList<ProductsClass> products = new ArrayList<ProductsClass>();
...
}
您正在构造函数中创建一个 ArrayList。 这意味着,产品仅在构造函数中有效 -> 范围是一个函数,因此它在函数之外不可用
在构造函数之外定义数组列表。
任一:
ArrayList<ProductsClass> products = new ArrayList<ProductsClass>();
Products() {
... //rest here
}
或
ArrayList<ProductsClass> products;
Products() {
products = new ArrayList<ProductsClass>();
... //rest here
}
您通常还应该为构造函数设置可见性。 又名:
public Products() {
...
}
您的代码编译情况如何?您是否在构造函数外部声明了成员变量 products 为:
ArrayList<ProductsClass> products;
在 method/loop 内创建的任何引用 alive/can 只有在 method/loop 内才能访问。所以发生的事情是,即使产品对象被创建、初始化和赋值,这和成员变量产品是两个不同的东西。成员变量未初始化,抛出空指针异常
您需要将产品列表声明为成员变量。并在构造函数中初始化它。