我正在上一门Java课程,我们的部分作业是为Node编写单链接列表类和类。
此类包含两个成员:\
private BusArrival _busArr;
private BusArrivalNode _next;
其中 BusArrival 是以前编写的类,并且可以正常工作。
我在使用setNext方法时遇到问题,特别是如何复制下一个节点的数据而不是指针
这是我写的类:如前所述,总线到达类的所有方法都可以正常工作
public class BusArrivalNode
{
private BusArrival _busArr;
private BusArrivalNode _next;
public BusArrivalNode (BusArrival b)
{
_busArr = new BusArrival(b);
_next = null;
}
public BusArrivalNode (BusArrival b, BusArrivalNode n)
{
_busArr = new BusArrival(b);
_next = n;
}
public BusArrivalNode ( BusArrivalNode n)
{
_busArr = new BusArrival(n._busArr);
_next = n._next;
}
public BusArrival getBusArr()
{
return _busArr;
}
public BusArrivalNode getNext()
{
return _next;
}
public void setBussArr(BusArrival b)
{
_busArr.setArrivalTime(b.getArrivalTime());
_busArr.setLineNum(b.getLineNum());
_busArr.setNoOfPass(b.getNoOfPass());
}
public void setNext(BusArrivalNode next) ** IS THIS THE CORRECT WAY?**
{
_next._busArr = new BusArrival(next._busArr);
_next._next = new BusArrivalNode(next._next);
}
}
在构造函数中,您似乎遇到了问题,BusArrivalNode(BusArrivalNode n)
,它会创建一个名为 tmp
的新BusArrivalNode
,该与给定的节点具有相同的_busArr
和_next
成员。
然后,将当前类的_next._busArr
设置为一个值。执行此操作时,尚未定义_next
,因此您正在设置 null 值的成员。这将导致 NullPointerException,因为您正在尝试执行任何操作。
该构造函数的当前内容:
BusArrivalNode tmp = new BusArrivalNode(n._busArr, n._next);
_next._busArr = tmp._busArr;
_next._busArr = tmp._busArr;
您可能想要什么:
_busArr = n._busArr;
_next = n._next;
谢谢,弄错了。复制 CTOR 适用于尚未创建的对象,有人做了一些更正这是我的情况中工作的 Node 类:
public class BusArrivalNode
{
private BusArrival _busArr;
private BusArrivalNode _next;
public BusArrivalNode (BusArrival b)
{
_busArr = new BusArrival(b);
_next = null;
}
public BusArrivalNode (BusArrival b, BusArrivalNode n)
{
_busArr = new BusArrival(b);
_next = n;
}
public BusArrivalNode ( BusArrivalNode n)
{
_busArr = new BusArrival(n._busArr);
_next = n._next;
}
public BusArrival getBusArr()
{
return _busArr;
}
public BusArrivalNode getNext()
{
return _next;
}
public void setBussArr(BusArrival b)
{
_busArr.setArrivalTime(b.getArrivalTime());
_busArr.setLineNum(b.getLineNum());
_busArr.setNoOfPass(b.getNoOfPass());
}
public void setNext(BusArrivalNode next)
{
_next = next;
}
}