0

私はこの 1 つの道に行き詰まっており、本当にイライラし始めています。私はすべてが適切に機能していると思いますが、これは1つの方法です。

LL からノードを削除すると、次の試行でヌル ポインター例外が発生し、何が原因かわかりません。

public void timeSlice(int cpuTime){
    for(Node curr=head; curr.getNext()!=head; curr=curr.getNext()){
        curr.time=curr.time-cpuTime;
        System.out.print("<" + curr.pid + ", " + curr.time +">" + " ");
        //if the time remaining <= 0 then remove the node
        if(curr.time<=0){
            System.out.println("\nProcess " + curr.pid + " has finished, and is now being terminated");
            remove(curr);
        }
    }
}//end timeSlice

メソッドを削除して再起動した後に発生します。通貨を削除したからだと思いますが、100%確信はありません。

public void remove(Node node){
    if(size == 0){
        return; 
    }
    else if(size == 1){
        removeFirst();
    }
    else{
        Node curr;
        for(curr=head; curr.getNext()!=node; curr=curr.getNext()){
        ;
        }
        curr.setNext(curr.getNext().getNext());
        node.setNext(null);
    }
        size --;
}//end remove

現在のテストは、最後から2番目のノードを削除することです

4

3 に答える 3

1

これはおそらく head == null が原因で発生しています。次回、エラー スタック トレースを投稿すると、より正確な回答が得られる可能性が高くなります。

head が null の場合、curr を null に設定してから、null で「getNext()」メソッドを呼び出すと、nullPointerException が発生します。少なくとも、それが私の最善の推測です。

于 2013-04-22T02:22:32.500 に答える
0

remove()in が呼び出されると、timeSlice()変数currintimeSlice()は削除されたノードを指し、原因をcurr.getNext()返します。nullNullPointerException

@Catherineが提案したように、前のノードへの参照を保持し、リストの先頭にダミーノードを使用してその使用法をより明確にする必要があります。(申し訳ありませんが、投票するのに十分な担当者がいません。)

// head.getNext() == head
Node head = new Node();

public void timeSlice(int cpuTime) {
    Node prev = head; // A dummy at head.
    Node curr = prev.getNext();
    for ( ; curr != head; prev = curr, curr = curr.getNext()) {
        // ...
        if (/* remove? */) {
            removeNext(prev);
            curr = prev;
        }
    }
}

public void removeNext(Node node) {
    node.setNext(node.getNext().getNext());
}
于 2013-04-22T02:37:23.003 に答える
0

呼び出しremoveた後currcurr'sgetNext()が返されnullます。次に、 のnull値を使用してループの次の反復に入りますcurr

nullそれを修正した後でも、チェックする必要があります。ノードがnullの場合、なぜループに入るのですか?

于 2013-04-22T02:38:03.947 に答える