我正在开发一个基数排序程序,它将使用队列作为垃圾箱。我正在使用我用于队列的append方法出错。当我尝试运行程序时,我输入一些单词进行输入,然后在尝试运行程序的bin排序部分时出现错误。它给了我以下错误:
Exception in thread "main" java.lang.NullPointerException
at LinkedQueue.append<LinkedQueue.java:53>
at RadixSort.main<RadixSort.java:31>
我首先假设这是因为我追加的队列是空的,所以我在append方法中添加了一个if语句来解释这个问题。在JUnit中测试之后,它可以工作 - 我可以将队列附加到空队列,并且所有数据值都在正确的位置,并且可以按正确的顺序出列。当我运行该程序时,它仍然无法正常工作。然后我意识到某些bin是空的,并在if语句中添加了一个条件来解释添加到队列中的空队列。我在JUnit中再次测试了它并且它成功地运行了。但是程序仍然无法运行 - 我得到与上面相同的运行时错误。我对这里没有考虑到的东西感到困惑 - 空值在哪里?下面我在LinkedQueue ADT类中包含了append方法的代码。此外,我正在使用节点来连接值 - .data
是数据值,.next
指向下一个节点。
public void append(LinkedQueue<T> q){
if(this.isEmpty()){
this.enqueue(q.front.data);
this.front.next = q.front.next;
this.rear = q.rear;
}else if(!this.isEmpty() && !q.isEmpty()){
this.rear.next = q.front;
this.rear = q.rear;
}else{
return;
}
}
此外,这是基数排序中的一段代码,它将所有队列箱附加到“主”队列(错误位于RadixSort.java:31):
for(int n=0;n<26;n++){
masterq.append(bins[n]);
}
这是一项家庭作业,所以如果你能指出我可以解决问题的正确方向,我将非常感激。