在下面的代码中,我有一种方法可以获得具有相同星座的Vector
个人。 persoane
是Vector<Persoana>
。我在if条件下不断获得NullPointerException
(persoane
绝对不为空)。我无法理解为什么。任何帮助将不胜感激
public Vector<Persoana> cautaDupaZodie(String zodie)
{
Vector<Persoana> rezultat= new Vector<Persoana>();
for(int i=0; i<persoane.size(); i++)
{
if(persoane.get(i).getData().getZodie().equals(zodie)) //the exception occurs here
{
rezultat.add(persoane.get(i));
}
}
return rezultat;
}
答案 0 :(得分:5)
NullPointerException
Object
上调用某个方法时,会出现 null
。
这意味着以下其中一项返回null
:
get(i)
getData()
getZodie()
逐个添加它们以找出导致异常的实际原因。
答案 1 :(得分:2)
persoane.get(i).getData().getZodie()
将其分成几行,以查看NPE发生的位置。
另外,请考虑使用for-each循环。
for (Persoana persoana: rezultat){
...
}
答案 2 :(得分:1)
getData()
或getZodie()
返回null
。
答案 3 :(得分:1)
您可以添加一些“跟踪”代码:
public Vector<Persoana> cautaDupaZodie(String zodie)
{
Vector<Persoana> rezultat= new Vector<Persoana>();
for(int i=0; i<persoane.size(); i++)
{
System.err.println(persoane.get(i));
System.err.println(persoane.get(i).getData());
System.err.println(persoane.get(i).getData().getZodie());
if(persoane.get(i).getData().getZodie().equals(zodie)) //the exception occurs here
{
rezultat.add(persoane.get(i));
}
}
return rezultat;
}
答案 4 :(得分:1)
可以是以下任何一种:
persoane
在任何索引中都包含null
persoane
的任何元素都会为null
getData()
getData()
结果都为null
getZodie()
为了进一步调查,您最好分解该方法链并添加条件断点。另外,重新考虑你的设计 - 这种“深度嵌套,无行为的数据结构操作的方法”对于这个和其他原因是不好的。
答案 5 :(得分:1)
首先,如果可能,您应该使用List<Person>
。然后,我建议将方法链分解为较小的步骤,以查看哪个确切的步骤失败。
public List<Person> searchZodiac(String zodiac) {
assert zodiac != null; // if it fails here, zodiac == null
List<Person> result = new ArrayList<Person>();
for (Person p : persons) {
Data d = p.getData(); // if it fails here, p == null
String z = d.getZodiac(); // if it fails here, d == null
if (z.equals(zodiac)) { // if it fails here, z == null
result.add(p);
}
}
return result;
}
答案 6 :(得分:1)
if(persoane.get(i).getData().getZodie().equals(zodie))
将上面的行分成几个部分。这里getData必须返回null,因此你得到NullPointerException