你们看到我的代码出了什么问题:
/** simulates the Josephus game by killing every other person
until the winner is the only one left.
@return The survivor of the game
*/
public E startJosephus() {
E item =head.data;
if(head.next != null){
if(head == head.previous)
return item;
}
else{
while(count>1){
removeAfter(head);
head =head.next;
}
}
return item;
}
以下是我的完整代码:http://pastebin.com/S0kWwFFV
这也是我的驱动程序类:http://pastebin.com/Nb08Dtqk
我得到的NullPointerExceptions似乎源于此方法。如果您发现我的代码有任何明显错误,请提供帮助。
答案 0 :(得分:3)
我没有读完你的所有代码,但我发现了这个:
public void addFirst(E dataItem) {
Node<E> node = new Node <E>(dataItem, null, null);
// To be completed by the student
if (head == null) // list is empty
head = head.previous = node;
else {
node.next = head;
head.previous = node;
head = node;
}
count++;
}
可能的罪魁祸首,
if (head == null) // list is empty
head = head.previous = node;
在此声明中,head.previous = node;
首先完成,但head
仍然为空。在将 head
设置为任何内容之前, 将抛出NullPointerException。
如果head为null,你肯定不想做head.previous
答案 1 :(得分:2)
来自您的构造函数:head = null;
变量head
永远不会被初始化
答案 2 :(得分:1)
如果没有更多信息,我必须猜测head
可能为空。