gpt4 book ai didi

java - 尝试从其他类访问 ArrayList 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 01:19:17 25 4
gpt4 key购买 nike

我正在编写一个管理库存的程序,例如通过添加、删除和租用元素,所有这些都是通过在面向对象的氛围中使用多个类来实现的。下面是我的实现类(Driver)。

驱动程序.java

public class Driver {
public static void main(String[] args)
{
ABCRentals abc = new ABCRentals();
Furniture item1 = new Furniture();
boolean flag = abc.add(item1);
List<Integer> idList = abc.getIDList();
String[] itemTypes = abc.getItemArray();
System.out.println("Item ID Numbers: " + Arrays.toString(idList.toArray()));
System.out.println("Item Types: " + Arrays.toString(itemTypes));
}
}

这段代码工作得很好,因为它能够通过 getIDList() 检索和打印 ArrayList 和 String 数组。和getItemArray()方法,在 ABCRentals 中指定类:

ABCRentals.java

public class ABCRentals implements Inventory
{
private List<Integer> idNumbers = new ArrayList<Integer>();
private List<Item> items = new ArrayList<Item>();
private List<Integer> rentedItems = new ArrayList<Integer>();
private String[] itemTypes2;

public ABCRentals() { }

public List<Integer> getIDList() {
return idNumbers;
}

public List<Item> getItemList() {
return items;
}

public String[] getItemArray() {
return itemTypes2;
}

public List<Integer> getRentedList() {
return rentedItems;
}

public boolean add(Item item)
{
if (items.size() >= 300)
return false;
else
{
idNumbers.add(idNumbers.size() + 1);
items.add(item);
Object[] itemTypes = items.toArray();
itemTypes2 = new String[itemTypes.length];
int dvd = 0, f = 0, tv = 0;
for (int index = 0; index < itemTypes.length; index++)
{
String indexValue = itemTypes[index].getClass().toString().substring(6);
if (indexValue.equals("DVDPlayer"))
{
dvd++;
itemTypes2[index] = indexValue + " #" + Integer.toString(dvd);
}
if (indexValue.equals("Furniture"))
{
f++;
itemTypes2[index] = indexValue + " #" + Integer.toString(f);
}
if (indexValue.equals("Television"))
{
tv++;
itemTypes2[index] = indexValue + " #" + Integer.toString(tv);
}
}
return true;
}
}

因此,当我尝试从 Driver 访问 ArrayList 和数组的内容时类,它有效。但是,当我尝试从任何其他类访问 ArrayList 或数组时,无论是 DVDPlayer , Furniture ,或Television类,我得到一个 NullPointerException错误,因此换句话说,ArrayList 和数组不会使用 Driver 中指定的值进行更新/填充。来自 add() 的类(class)方法,而是返回为空,与上面不同。我将使用Furniture类例如:

家具.java

public class Furniture implements Item
{
private ABCRentals abc = new ABCRentals();
public List<Integer> idList = new ArrayList<Integer>();
public String[] itemArray = abc.getItemArray();
private int ID;
private static int idNumber = 0;

public Furniture()
{
ID = ++idNumber;
}

public String getId()
{
int index = Arrays.asList(itemArray).indexOf("Furniture #" + Integer.toString(ID));
id = Integer.toString(index);
return id;
}
}

然后将这一行代码添加到上面的 Driver 类中 String[] itemTypes = abc.getItemArray() 之后行结果为 NullPointerException :

String id = item1.getId();

为了简单起见,Driver类可以访问存储在 ABCRentals 中的 ArrayList 和数组的内容类通getIDList()getItemArray()方法,但像 Furniture 这样的类不能。唯一的区别似乎是一个类有 main()方法,而另一个则没有。我不是在声明ABCRentals Furniture 中的对象正确分类以获得更新的值? 重要提示:我无法更改 getId()方法来接受像 ArrayList 这样的参数,因为这是一项家庭作业,需要具有与指定相同的类和方法签名。抱歉,如果这看起来像代码转储,但我认为了解我试图完成的每一步以理解我的问题很重要。非常感谢您的帮助!

最佳答案

您在 main 中调用 add() 方法,该方法实例化 itemTypes2 数组。在访问 Furniture 类中的 itemTypes2 之前,您不会调用 add(),因此它为 null。

关于java - 尝试从其他类访问 ArrayList 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039768/

25 4 0