这是一个nullpointerexception?

时间:2011-10-03 14:37:39

标签: 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)){
             namesOfParts.add(availableParts.get(i).getName());
         }
    }//middle if statement makes sure there are no repeats
}
编辑:我意识到namesOfIngredients为null。但是,我需要它来启动null - 这就是我复制名称的方式。这可不是这样做的吗?

6 个答案:

答案 0 :(得分:8)

确保

  1. 列表availablePartsnamesOfIngredients都不是null
  2. 您要向(namesOfParts)添加元素的列表已使用构造函数(不是null)正确初始化。
  3. 这些列表中的所有元素都不是null
  4. 请记住,字符串比较是使用String.equals()完成的。检查两个String对象上的相等性(==)只有在它们是同一个实例时才返回true。

    作为旁注,您可以考虑使用List.contains()来查明某个部分的名称是否在namesOfIngredients列表中。此外,也许这是一个拼写错误,但你应该检查namesOfParts.get(j) {{1}}在同等检查中。

答案 1 :(得分:3)

你试图在循环本身中查看namesOfParts,但是在循环的定义中,你将使用namesOfIngredients的长度。其中一个是空的吗?我打赌一个是。

答案 2 :(得分:0)

availableParts.get(i)可能为null,因此getName()调用会产生NPE。

答案 3 :(得分:0)

我们不知道:我们无法看到availablePartsnamesOfParts的初始化方式。

但我们可以告诉你如何找出答案。像这样添加打印语句:

print "Before I try it"
print availableParts.get(i)
print namesOfParts(availableParts.get(i))
print "done"

当它是NPE的时候,你会看到究竟是哪一个做了这件事。

答案 4 :(得分:0)

您似乎在循环中调用了许多方法,而没有检查您调用它的对象是否为NULL。总是建议这样做(特别是,如果你不确定给定方法返回的对象的合同)

因此,基本上,每当您执行object.method()和/或object.method1().method2()之类的操作时,请确保在调用后续方法之前object和/或object.method1()为非NULL他们的回报值。

此外,您可以通过以下方式中断呼叫,以便在确切位置更好地调试和捕获NPE:

Object returnObj = object.method1();
Object anotherReturn = returnObj.method2();

答案 5 :(得分:0)

鉴于您的编辑 - 您如何声明namesOfIngredients?

应该是

Object namesOfIngredients = new Object(); 

不是

Object namesOfIngredients;