3

在下面的代码中,我有一个方法可以得到一个Vector具有相同星座的人。persoane是一个Vector<Persoana>。我一直NullPointerException在 if 条件下得到一个(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;
}
4

7 回答 7

5

NullPointerException当您尝试在Objectthat is上调用方法时会发生null

这意味着以下返回之一null

  • get(i)
  • getData()
  • getZodie()

将它们一一添加以找出导致异常的实际原因。

于 2010-03-24T08:32:27.187 回答
2
persoane.get(i).getData().getZodie()

将其分解为几行以查看 NPE 发生的位置。

另外,考虑使用 for-each 循环。

for (Persoana persoana: rezultat){
    ...
}
于 2010-03-24T08:33:20.310 回答
1

它可以是以下任何一种:

  • persoanenull在任何索引处包含 a
  • persoane返回null的任何元素getData()
  • 任何getData()结果都会null返回getZodie()

要进一步调查,您最好分解该方法链并添加条件断点。此外,重新考虑你的设计——这种“在深度嵌套、无行为数据结构上运行的方法”由于这个和其他原因是不好的。

于 2010-03-24T08:38:34.117 回答
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;
}
于 2010-03-24T08:39:20.903 回答
1
if(persoane.get(i).getData().getZodie().equals(zodie))

将上面的行分成几个部分。这里 getData 必须返回 null 所以你得到 NullPointerException

于 2010-03-24T08:40:04.773 回答
1

getData()getZodie()返回null。_

于 2010-03-24T08:33:20.273 回答
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;
}
于 2010-03-24T08:35:02.843 回答