-3

你们有没有看到我的代码有什么问题:

/** 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。如果您发现我的代码有任何明显错误,请提供帮助。

4

2 回答 2

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仍为空。NullPointerException在设置为任何内容之前被抛出。 head

如果 head 为空,你肯定不想做 head.previous

于 2012-10-27T00:35:13.053 回答
1

如果没有更多信息,我不得不猜测head可能是空的。

于 2012-10-27T00:22:05.463 回答