我正在尝试为双链表实现冒泡排序,但是我得到了NullPointerException
。
代码如下:
public void bubbleSort()
{
DLLNode<E> tmp = this.first; // (1)
DLLNode<E> tmp2 = null; // (1)
boolean flag = true;
while(flag)
{
// (2)
flag = false;
while(tmp.succ!=null)
{
if(tmp.element2.compareTo(tmp.succ.element2)<0)
{
tmp2.element2 = tmp.element2;
tmp.element2 = tmp.succ.element2;
tmp.succ.element2 = tmp2.element2;
tmp2.element1 = tmp.element1;
tmp.element1 = tmp.succ.element1;
tmp.succ.element1 = tmp2.element1;
flag = true;
}
tmp = tmp.succ;
}
}
}
另一件事:我认为这种方法只会对列表进行一次迭代,并且一开始就不会回头。我认为将tmp
和tmp2
从(1)
移到(2)
将解决此问题。但是我仍然收到NullPointerException
。
答案 0 :(得分:0)
这行似乎是问题所在:
DLLNode<E> tmp2 = null; // (1)
在这里,您创建了一个空指针。几行之后,没有对tmp2
进行任何进一步分配,您尝试使用此空指针访问tmp2.element2
,这会使程序崩溃:
tmp2.element2 = tmp.element2;
重新评估您的设计,并确保在尝试访问其属性或方法之前已初始化所有对象。