-5

これは、CircularLinkedListを使用することになっているJosephusクラスのaddメソッドです。クラスのいくつかの領域でnullポインター例外が発生していますが、これはすべてこのメソッドが原因です。誰かがこのコードを見ることから明らかな間違いを見ることができますか?

/** Inserts the specified element in the list at the
     last position
     @param dataItem the element to add
   */
 // Complexity O(1)
 @SuppressWarnings({ "unchecked" })
public void add(E dataItem) {
    Node <E> node = new Node <E> (dataItem,null,null);
    if (count == 0){ // list is empty
        head = node.previous= node;  
    }

    else {
       head.previous.next = node;
       node.previous = head.previous;
       head.previous = node;
    }
    count++; 
    }

完全なコード: http: //pastebin.com/k4Hmbqmw

4

2 に答える 2

6

elseはい、セクションを中括弧で 囲む必要があります。

public void add(E dataItem) {
    Node <E> node = new Node <E> (dataItem, null, null);
    if (count == 0) { // list is empty
        head = node.previous= node ;  
    } else {
       (head.previous).next = node;
       node.previous = head.previous;
       head.previous = node;
    }
    count++;
}

それ以外の場合、最後の 1 行だけでなく、最後の 3 行が毎回実行されます。

于 2012-10-26T21:49:11.207 に答える
1

if/else ブロックの周りに中括弧がありません

于 2012-10-26T21:49:28.843 に答える