1

私が抱えている問題により、何日も髪を引き裂いています。ご覧のとおり、エラーが発生した場所を確認できるように、そこに printlns を配置しました。テーブル内のデータを確認した後、最後のデータ部分の後に nullpointer 例外が発生します。コードが再度ループするのを止めないのはなぜですか?

public void prepare(int sheet, Students [] gradeSpecific, Students [] mcl)
        {
            String [] useableCandidates;
            useableCandidates = new String [200];//school never has more than 40 candidates therefore 200 is more than enough


        int i= 0;



        if(sheet==1)
        {
            while(!gradeSpecific[i].getFirst_name().equals(null) && !gradeSpecific[i].getSurname().equals(null))
            {
                if(useableCandidates[i]==null)
                {useableCandidates[i]= new String();}

                System.out.println(gradeSpecific[i].getFirst_name()+gradeSpecific[i].getSurname()); 
                useableCandidates[i]= gradeSpecific[i].getFirst_name()+" , "+gradeSpecific[i].getSurname();
                System.out.println(useableCandidates[i]);
                i++;
            }
        }
        else 
        {
            while(!mcl[i].getFirst_name().equals(null) || !mcl[i].getSurname().equals(null))
            {
                    useableCandidates[i]= mcl[i].getFirst_name()+" , "+mcl[i].getSurname();
                    i++;
            }
        }



    }
4

2 に答える 2

4

まず、論理演算子 OR を使用します||。これは、いずれかが null になる可能性があり、 while がステートメントを評価できることを意味します。AND&&を使用して、どちらも null でないことを確認する必要があります。次に、単純な for ループを使用しない理由は何ですか?

for (; mcl[i].getFirst_name() != null && mcl[i].getSurname() != null && i < mcl.Length(); i++)
{
    useableCandidates[i]= mcl[i].getFirst_name()+" , "+mcl[i].getSurname();
}

もちろん、mcl[i]指定された が存在しない場合i、これは ArrayOutOfBoundsException をスローします。この状態をチェックすることも重要です。

于 2013-07-29T15:47:37.260 に答える
1

これらの条件:

while(!mcl[i].getFirst_name().equals(null))

mcl[i].getFirst_name()null を返すと NullPointerException が返されます。次のように変更します。

while ( mcl[i].getFirst_name() != null && mcl[i].getSurname() != null )
于 2013-07-29T15:48:21.023 に答える