对于我整晚都在想的这个问题,可能有一个简单的解决方案。至少我希望有。当尝试提供一个对象给我的子队列LinkedList时,我收到一个NullPointerException。我的程序打印出正确的"head"对象和"digit"整数,但随后抛出Exception,程序结束。
简而言之,我的程序应该取一个由整数组成的mainQueue LinkedList,逐个查看它们,并对它们进行排序。它检查每个整数的最后一位,并将它们放入相应的子队列中。到目前为止,我只到1位。等我解决了这个难题,我就能算出十位、百位等等了。
交货)
mainQueue = { 12 50 215 100 85 539 16 35 }
subQueue[0] = { 50 100 }
subQueue[1] = { }
subQueue[2] = { 12 }
subQueue[3] = { }
subQueue[4] = { }
subQueue[5] = { 215 85 35 }
subQueue[6] = { 16 }
subQueue[7] = { }
subQueue[8] = { }
subQueue[9] = { 539 }
我哪里做错了?就像我说的,一旦我解决了这个小问题,剩下的程序应该是轻而易举的。任何帮助都很感激,谢谢!
public class Sorting
{
private LinkedList mainQueue;
private LinkedList[] subQueues;
private final int SIZE = 10;
private int maxDigits; //maximum number of digits
//The constructor instantiates the mainQueue using the LinkedList,
//subQueue array as an array of LinkedList using SIZE(10),
//and initializes maxDigits = 0;
public Sorting()
{
mainQueue = new LinkedList();
for (int i=0; i<SIZE; i++)
{
subQueues = new LinkedList[i];
}
// I have also tried:
// subQueues = new LinkedList[SIZE];
//I get the same runtime error.
maxDigits = 0;
}
public void sortNumbers()
{
while (mainQueue.isEmpty() == false)
{
Object head = mainQueue.peek();
mainQueue.remove();
String digitLine = "" + head;
int digit = Integer.parseInt(digitLine.substring(digitLine.length()-1, digitLine.length()));
System.out.println(head);
System.out.println(digit);
subQueues[digit].offer(head);
}
}
}
您没有正确地构建您的subQueues
。如果你想要一个SIZE
链表数组,试试这个:
subQueues = new LinkedList[ SIZE ];
for ( int i = 0; i < SIZE; ++i ) {
subQueues[i] = new LinkedList();
}
请注意,这是使用原始类型作为您的代码,尽管最好您应该使用参数化类型。