1

我的问题已经让我把头发扯了好几天了。如您所见,我将 printlns 放在那里,以便检查错误发生的位置。查看表中的数据后,在最后一个数据块之后发生空指针异常。为什么我的代码不能阻止它再次循环?

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 ||,这意味着其中一个可以为空,而 while 仍然可以评估该语句。您需要使用 AND&&来确保自己都不为空。其次,您为什么不为此使用简单的 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 回答