Java 这怎么会是nullpointerexception?
我真的很困惑:我只是想把Java 这怎么会是nullpointerexception?,java,arraylist,Java,Arraylist,我真的很困惑:我只是想把ArrayList中每个对象的名称添加到另一个ArrayList中 for (int i = 0; i < availableParts.size(); i++) { for (int j = 0; j < namesOfIngredients.size(); j++){ if (availableParts.get(i).getName() != namesOfParts.get(j)){ namesOfP
ArrayList
中每个对象的名称添加到另一个ArrayList
中
for (int i = 0; i < availableParts.size(); i++) {
for (int j = 0; j < namesOfIngredients.size(); j++){
if (availableParts.get(i).getName() != namesOfParts.get(j)){
namesOfParts.add(availableParts.get(i).getName());
}
}//middle if statement makes sure there are no repeats
}
for(int i=0;i
编辑:我意识到NamesofIngreents是空的。但是,我需要它以null开头——这就是我复制名称的方式。不能这样做吗?确保
availableParts
和NamesofIngreents
都不是null
nameofpart
)已使用构造函数正确初始化(不是null
)null
==
)仅当它们是同一实例时才会返回true
作为一个旁注,您可以考虑使用以确定某个部件的名称是否在<代码> NAMESOFFECTON>代码>列表中。此外,可能是输入错误,但您应该在该相等性检查中检查at
nameofparts.get(j)
您试图查看循环本身中的部分名称,但在循环的定义中,您将看到部分名称的长度。其中一个是空的吗?我打赌其中一个是。可用部件。get(I)可能为null,因此getName()调用会导致NPE。我们不知道:我们看不到可用部件和部件的名称是如何初始化的
但我们可以告诉你如何找到答案。添加如下打印语句:
print "Before I try it"
print availableParts.get(i)
print namesOfParts(availableParts.get(i))
print "done"
当它是NPE时,您将确切地看到是谁做了这件事。您似乎在调用循环中的许多方法,而没有检查调用它的对象是否为NULL。这样做总是明智的(特别是,如果您不确定给定方法返回的对象的约定)
因此,基本上,每当您执行类似于object.method()
和/或object.method1().method2()
的操作时,请确保object
和/或object.method1()
在对其返回值调用后续方法之前不为NULL
此外,您还可以通过以下方式中断调用,以便更好地在确切位置调试和捕获NPE:
Object returnObj = object.method1();
Object anotherReturn = returnObj.method2();
根据您的编辑-如何声明事件的名称
应该是
Object namesOfIngredients = new Object();
不是
哪一行有NPE?内部for循环(带j的那一行)。如果您想使用调试器的话,您可能会遇到很多其他问题。这是我一眼就能看到的东西。当您选中namesOfParts.get(j)
时,您可能会得到一个indexOutOfBounds
异常,因为您在第一次检查时没有在该列表中放入任何内容。您将获得大量重复项,因为每次您在namesOfParts列表中找到具有不同名称的项时,您都在添加另一个AvailableParts.get(i)
实例。希望这能帮你在将来省去一些麻烦:谢谢。这其实是我的问题。很抱歉没有提到它是如何初始化的。
Object namesOfIngredients;