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

null ポインター例外が発生している場合、この場合、もっともらしい説明が 2 つあります。

  1. リストが空です。つまり、最初から firstLink がなく、まだ初期化されていないポインタにアクセスしようとしているため、null ポインタが返されます。

  2. リストには要素が 1 つしかありません。したがって、firstLink.next() は null ポインターを返します。

リストを反復処理する 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 に答える