在java中为链接列表自写的节点类



我正在上一门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;
    }
}

相关内容

  • 没有找到相关文章

最新更新