我试图开始工作时遇到这种方法的麻烦。我的任务是删除元素的第一次出现。当列表中有要删除的元素时,它可以正常工作。但是如果我搜索一个不在列表中的元素,它会在我的while循环中抛出一个nullpointer异常。 似乎无法找到问题,我希望循环停止:找到元素或当temp.next == null(也就是在列表的末尾)。 有人能指出我正确的方向吗?
public void deleteFirstOccurance(int data)
{
Node temp = head;
boolean foundElement = false;
if(head==null) //Sjekker om listen inneholder elementer
{
System.out.println("There are no elements in list");
}
else
{
if(temp.element==data) //Sjekker første node
{
head = temp.next;
System.out.println(temp.element+" is deleted");
elementCount--;
foundElement = true;
}
else
{
while(temp.next != null || temp.next.element != data) //Leter fra node sin next frem til den finner data eller treffer null
{
temp = temp.next;
}
if(temp.next.element == data)
{
System.out.println(temp.next.element+" is deleted");
temp.next= temp.next.next;
elementCount--;
foundElement = true;
}
}
}
if(!foundElement)
System.out.println("No elements found");
}//Oppgave3
答案 0 :(得分:0)
抛出异常,因为在检查temp.next.element
是否为temp.next
之前,您获得了null
的值。
while
循环结束后的同样事情:您有if (temp.next.element == data)
但temp.next
可能在null
。此时,它是下一个元素是您要查找的元素,或null
。因此,检查if (temp.next != null)
就足够了。
条件也应该是&&
,而不是||
:你希望继续循环,而你有下一个元素和这个元素不是你想要的。
要解决问题,请将while(temp.next.element != data || temp.next != null)
替换为while (temp.next != null && temp.next.element != data)
,并在if (temp.next.element == data)
循环后用while
替换if (temp.next != null)