gpt4 book ai didi

java - 我的队列(链接列表)中的空指针

转载 作者:行者123 更新时间:2023-12-01 13:13:10 25 4
gpt4 key购买 nike

好的,我已经快完成这个程序了,但是此时我迷失了方向。我正在返回空指针(它在第 44 行说,但这只是一个 while 循环),我需要帮助修复它。我使用链表来实现我的队列,而我的其他两个类通过了 100%,因此最终类(CarQueue)是问题所在,即创建空指针。

    public class CarQueue<E> {

private LinkNode<E> head;
private LinkNode<E> tail;

public CarQueue() {
head = null;
tail = null;
}

public CarQueue(E newData) {
LinkNode<E> temp = new LinkNode<E>(newData, null);
head = temp;
tail = temp;
}

public void addToQueue(E newData) {
LinkNode<E> temp = new LinkNode<E>(newData, null);
if (empty() == false) {
tail.setNext(temp);
tail = temp;
} else {
head = temp;
tail.setNext(temp);
tail = temp;
}
}

public String toString() {
LinkNode<E> temp = head;
String cars = "";
while (temp.getNext() != null) {
cars += temp.toString() + '\n';
}
return cars;
}

public E removeFmQueue() {
LinkNode<E> headReturn = head;
head = head.getNext();
return headReturn.getData();

}

public LinkNode<E> peek() {
return head.getNext();
}

public boolean empty() {
if (head == null)
return true;
else
return false;
}
}

最佳答案

如果

while (temp.getNext() != null)  {

是抛出异常的行,则 temp 为 null,(或者,如果可能的话,getNext() 会抛出 NullPointerException >)。但我们假设 temp 是问题所在。

temp 被分配给 head,那么 head 是否被分配给 null

如果调用零参数构造函数,但在调用 toString() 之前没有调用其他函数,那么这确实会导致 temp 被赋值。因此,当您尝试 temp.getNext() 时,会引发 NullPointerException

为了防止这种情况,您可以使用 toString() 方法返回一个替代值:

public String toString()  {
if(head == null) {
return "no head. I got nothing.";
}

//print the other stuff...
}

但是,实际上,最好的解决方案是永远不允许 head(因此 temp)为空,因为这意味着您的类处于不稳定且基本上无法使用的状态。

防止这种情况的最明显方法是消除零参数构造函数 - 或者让它使用非空值调用另一个构造函数 - 并确保另一个构造函数永远让 head 保持为空。

关于java - 我的队列(链接列表)中的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com