使用Java中的冒泡排序的空Ptr异常

时间:2012-09-26 03:08:52

标签: java nullpointerexception linked-list bubble-sort

在得到我的代码之前,我得到一个空指针异常。我不知道它是否会正常工作,因为我无法通过这一点。

此行中出现错误:

if(currentNode.getData() > currentNode.getNext().getData())

这是我的冒泡分类:

public static void bubbleSort(DoubleLinkedList list) //static method used to sort the linked list using bubble sort
      {
          int i = 0;
          int j = 0;
          Node currentNode = list.head;
          Node previousNode = currentNode;
          Node tempNext =  currentNode;
          Node tempPrevious = currentNode;


          for(i=1; i<list.getSize(); i++)
          {
              for(j=0; j<list.getSize()-1; j++)
              {
                  if(currentNode.getData() > currentNode.getNext().getData())
                  {
                      if(currentNode == list.head)
                      {
                          Node tempNode = currentNode.getNext();

                          list.head = tempNode;
                          tempNext = tempNode.getNext();

                          tempNode.setNext(currentNode);
                          currentNode.setNext(tempNext);
                          currentNode.setPrevious(tempNode);

                          tempNext.setPrevious(currentNode);
                      }
                      else if(currentNode.getNext() == list.last)
                      {
                          Node tempNode = currentNode.getNext();
                          list.last = currentNode;
                          tempPrevious = currentNode.getPrevious();

                          tempNode.setNext(currentNode);
                          tempNode.setPrevious(tempPrevious);

                          currentNode.setPrevious(tempNode);
                      }
                      else
                      {
                          Node tempNode = currentNode.getNext();
                          tempPrevious = currentNode.getPrevious();
                          tempNext = currentNode.getNext();

                          tempPrevious.setNext(tempNode);
                          tempNext.setPrevious(currentNode);

                          currentNode.setNext(tempNext);
                          tempNode.setPrevious(tempPrevious);
                      }

                  }

                  currentNode = currentNode.getNext();

              }
          }



      }

我认为我的循环的限制会阻止编译器尝试访问不一定存在的指针,这是我理解的空指针异常。

如果有人可以帮助我解决这个错误,以便我可以测试我的冒泡排序,我将非常感激!

2 个答案:

答案 0 :(得分:1)

currentNode为空或currentNode.getNext()返回null,这就是您无法在其上调用getData()的原因。在使用它们之前,应始终检查节点是否为空值。

答案 1 :(得分:1)

如果currentNodecurrentNode.getNext()正在或正在返回null不会导致问题,那么我猜测getData()方法不会返回原始数据类型(如int),但是一个对象(如Integer)。

在这种情况下,getData()可以返回null和out-boxing,将包装器类实例自动转换为<操作所需的包装基元类型,会失败并导致NPE。