当我执行这一行时,我得到一个 NullPointerException
:
temp.previous.next = null;
在下面代码的最后一个 else
中。
Contact
类是链表的一个节点。
谁能看出问题出在哪里?
public Contact delete(){
Scanner keyboard =new Scanner(System.in);
Contact temp = first;
System.out.print("Enter a name: ");
String name = keyboard.next();
while (temp != null) {
if (temp.name.equalsIgnoreCase(name)) {
break;
}
temp = temp.next;
}
if (temp == null) {
System.out.println("record not found.");
} else if (count == 1) {
first = null;
last = null;
count--;
return temp;
} else if (count==2) {
if (temp == first) {
temp.next.previous = null;
first = temp;
count--;
return temp;
} else {
first.next = null;
count--;
return temp;
}
} else if (count >= 3) {
if (temp == first) {
temp.next.previous = null;
first = temp.next;
count--;
return temp;
} else {
if (temp.next != null) {
temp.next.previous =temp.previous;
temp.previous.next = temp.next;
count--;
return temp;
} else {
temp.previous.next = null; // <-- NPE here!
count--;
return temp;
}
}
}
return temp;
}
最佳答案
您正在将 null
分配给 temp.previous.next
,但您没有检查 temp.previous
是否不为 null。
此外,您使用 first
初始化 temp
,它可能(作为“first”)没有前一个节点 - 即 temp.previous
会可能为空。
因此,您很可能在尝试执行问题代码时遇到 NullPointerException
。
QED。
关于java - 将 null 分配给链表中的对象会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712087/