在得到我的代码之前,我得到一个空指针异常。我不知道它是否会正常工作,因为我无法通过这一点。
此行中出现错误:
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();
}
}
}
我认为我的循环的限制会阻止编译器尝试访问不一定存在的指针,这是我理解的空指针异常。
如果有人可以帮助我解决这个错误,以便我可以测试我的冒泡排序,我将非常感激!
答案 0 :(得分:1)
currentNode
为空或currentNode.getNext()
返回null,这就是您无法在其上调用getData()
的原因。在使用它们之前,应始终检查节点是否为空值。
答案 1 :(得分:1)
如果currentNode
和currentNode.getNext()
正在或正在返回null
不会导致问题,那么我猜测getData()
方法不会返回原始数据类型(如int
),但是一个对象(如Integer
)。
在这种情况下,getData()
可以返回null
和out-boxing,将包装器类实例自动转换为<
操作所需的包装基元类型,会失败并导致NPE。