2016-05-01 15 views
1

私は同様の問題を探してみましたが、無駄です。演算子を "!="から "=="に変更すると、 "{}"が出力されます。また、単純に私がテストしている変数(current.myData)を出力すると、それが参照するIntegerが期待どおりに出力されます。しかし、私は "current.myData!= null"をテストするたびにヌルポインタ例外をスローして終了します。どんな助けでも大歓迎です!ループ本体にJava汎用オブジェクトNullポインタチェックNullポインタ例外をスローする

public class LinkedQueue<E> implements QueueADT<E> { 

@Override 
public String toString() { 
... 
    String exitVal = null; 
    final StringBuffer sb = new StringBuffer(); 
    if (myFront.myData == null) { 
     exitVal = "{ }"; 
    } else { 
     Node<E> current = myFront.myNext; 
     sb.append('{'); 
     sb.append(myFront.myData); 
     while (current.myData != null) { 
      sb.append(", "); 
      sb.append(String.valueOf(current.myData)); 
      current = current.myNext; 
     } 
     sb.append('}'); 
     exitVal = sb.toString(); 
    } 
    return exitVal; 
} 
+3

のようなものに

while (current.myData != null) { 

を変えることができますか? – MikeCAT

答えて

1

current = current.myNext;myNextが反復current最初の(又は後続の)ループがnullでなければならないのいずれかでそうnullあるためのテストを持っていません。あなたはそれが単に `current`は` null`なのであるという意味ではありません

while (current != null && current.myData != null) { 
+0

修正が完了しています。ありがとうございました!私はそれを完全に理解しているかどうかはわかりません。これは、Javaが 'current.myData'がnullであるかどうかをチェックする前に 'current'がnullでないことを確認することを意味しますか?だから、私のテストはノードのフィールドの前に実際のノード(またはその欠如)に当たっていましたか? – audiobomber

関連する問題