2017-02-10 1 views
0

C++のリンクリストには基本的に問題はありませんでしたが、何らかの理由でこれが私のところに届いています。提供されたパッケージ内の他のクラスを使用して単一のノードを印刷しましたが、私が続けると壁にぶつかります。Javaのリンクリストのキューをデバッグする方法は?

以下のコードは、私の周りの微妙な変化のためにシャンブルになっています。私はここからどこに行くのか分かりません。現時点では、NULLポインタ例外が発生しています。

ただの情報:poll()は、現在のヘッドを取り除いて戻しているだけです。offer()が背面に追加されています。現時点では例外はofferメソッドのoldLast.next = lastです。

私はこれを完全に解決するよう誰にも求めていません。進歩するためのヒントが必要なだけです。

public class FIFOQueue implements Queue { 

//put your name as the value of the signature. 
String signature = "name"; 

Node head = new Node(null); 
Node pointer = head; 
Node first; 
Node last; 
Node prev; 
Node curr; 

class Node { 
    Process process; 
    Node next; 


    Node(Process p) { 
     this.process = p; 
     this.next = null; 
    } 

} 

@Override 
public void offer(Process p) { 


    if(head == null) 
    { 
     head = new Node(p); 
     first = head; 
     last = head; 

    } 

    else 
    { 

     Node oldLast = last; 
     Node newNode = new Node(p); 

     last = newNode; 
     oldLast.next = last; 


    } 



} 


@Override 
public Process poll() { 


    if(isEmpty()) 
     throw new NoSuchElementException(); 

    Node oldPointer = first; 

    first = first.next; 
    head = first; 


     return oldPointer.process; 
} 

@Override 
public boolean isEmpty() { 

return head == null; 

} 

@Override 
public String getSignature() { 
    return signature; 
} 

} 
+1

より具体的にする必要があります。 「15行目にArrayIndexOutOfBoundsExceptionがある」と言うと、「物事はうまくいかず、あなたが私を助けてくれることを願っています」と答えると答えが出る可能性が高くなります。 – Kayaman

+0

真実、申し訳ありません。現在のところ、私は例外を "\t \t \t oldLast.next = last;"から取得しています。オファー機能で。 – Clannadqs

+0

そこから 'NPE'を取得している場合、' oldLast'はnullです。 'NullPointerException'を得るたびにhttp://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-itを参照してください。 – Kayaman

答えて

0

私はあなたの問題の核心はここにあると思う:

Node prev; 
Node curr; 

これらはあなたを混乱されています。削除してください。

  1. Node prev; - これはNodeクラスにする必要があります。
  2. Node curr; - これはインスタンス変数ではなく、ローカル変数である必要があります。

また

Node head = new Node(null); 

if(head == null) 
{ 
    head = new Node(p); 

を有するゲルのどちらかhead == nullは、リストが空または何か他のものであることを意味することはありません - しかし、一貫しています。

+0

私はまだどちらかを使用したとは思わない。これは進行中の作業で、何かが働いているかどうかを確認するためにちょっとした作業をしていました。これらの2つの変数を使用することは私の次の動きでした。私はこれまでに宣言しただけです。 – Clannadqs

+0

あなたの編集を目覚めて見ました。私に戻ってきてくれてありがとう。私はそれらの2つがどのように整列していないかについて混乱している。頭が空になるべきか? – Clannadqs

+0

あなたのご意見は、基本的に私の問題を解決するのに役立ちました。ノード全体がヌルであるかどうかをチェックするのではなく、ノード内の実際のデータがヌルであったかどうかを確認することが最初のチェックであったはずであることがわかりました。ありがとう! – Clannadqs

0

(OPの代わりに掲示)

public void offer(Process p) { 


    if(head.process == null) 
    { 
     head = new Node(p); 
     first = head; 
     last = head; 
    } 


     last.next = new Node(p); 
     last = last.next; 

} 

これが私の問題を解決しました。私はこれが私を混乱させることを信じることができません。

関連する問題