0

我正在编写自己的 LinkedList 类(我知道 API 中有一个 .. 等) 我的 DLink 中存储了整数,getElement() 返回存储在链接中的整数。

我从“return temp.getElement();”行中得到一个空指针异常 我的 get 方法有问题吗?例如为什么我想要这个方法:当我调用 get(0) 我想返回列表中的第一个元素

public int get(int index)
{

       //forces the index to be valid
      assert (index >= 0 && index < size());

      DLink temp = _firstLink; //start at the head of the list

      //iterate to the correct node
      for(int i = 0; i < index; i++)
      {
          temp = temp._next;
      }

      return temp.getElement(); //and return the corresponding element



    }

如果您想查看它,这是我的 DLink 课程:

//elements in DLink are integers
public class DLink {
    public int _element;

    public DLink _next;
    public DLink _previous;

    public DLink(int e)
    {
        _next = null;
        _previous = null;

        this._element = e;
    }

    public int getElement()
    {
        return _element;
    }

    public void setNext(DLink link)
    {
        _next = link;
    }
    public void setPrev(DLink link)
    {
        _previous = link;
    }

    public DLink getPrev()
    {
        return _previous;
    }

    public DLink getNext()
    {
        return _next;
    }

}
4

2 回答 2

0

你什么时候初始化你的列表?或者更具体地说 - 在哪里_firstLink声明和分配?在获得空指针异常之前您要进行什么调用?

没有看到上下文 - 我的猜测是你没有_firstLink正确初始化。

我建议您只需调试此代码并查看您在运行时定义的数据结构。

于 2013-09-08T20:08:17.680 回答
0

如果你得到一个空指针异常,在这种情况下有两个合理的解释。

  1. 你的列表是空的,即没有 firstLink 开头,你得到一个空指针,因为你试图访问一个尚未初始化的指针。

  2. 您的列表只有一个元素。因此 firstLink.next() 会给你一个空指针。

在进入遍历列表的 while 循环之前,您应该始终执行一些检查。

if(firstLink == null)
    return;

if(firstLink.next() == null)
    return;

或者你可以在while循环之前有一个初始子句

if(firstLink != null && firstLink.next() != null)
    while(true)
        ...do-something
于 2013-09-08T21:23:42.030 回答