3

次のコードではVector、同じ星座を持つ人を取得する方法があります。persoaneですVector<Persoana>。私NullPointerExceptionはif条件でaを取得し続けます(persoane明らかにnullではありません)。理由がわかりません。どんな助けでも大歓迎です

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であるメソッドを呼び出そうとすると発生しObjectますnull

これは、次のいずれかが返されることを意味しますnull

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

それらを1つずつ追加して、実際に例外を引き起こしている原因を見つけてください。

于 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

またはは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 に答える
1

次のいずれかになります。

  • persoanenull任意のインデックスに含まれています
  • 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 に答える