2016-05-01 8 views
1

Ich habe versucht, ein ähnliches Problem zu suchen, vergebens. Wenn ich den Operator von "! =" Zu "==" ändere, wird "{}" ausgedruckt. Wenn ich die Variable, die ich gerade testet (current.myData), einfach ausdrucke, wird die Ganzzahl, auf die sie verweist, wie erwartet ausgegeben. Jedes Mal, wenn ich "current.myData! = Null" teste, wird jedoch eine Nullzeiger-Ausnahme ausgelöst und beendet. Jede Hilfe wird sehr geschätzt!Java Generic Object Null Zeiger Check Throwing Null Zeiger Ausnahme

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

ändern Bedeutet es nicht einfach, dass '' current' ist null'? – MikeCAT

Antwort

1

In der Schleife hat current = current.myNext; kein Test für myNextnull so auf entweder die erste (oder eine nachfolgende) Schleifeniteration currentnull sein muss. Sie könnten

while (current.myData != null) { 

um so etwas wie

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

Sie sind fix funktioniert perfekt. Vielen Dank! Ich bin mir jedoch nicht sicher, ob ich es vollständig verstehe. Bedeutet dies, dass Java prüft, ob 'current' nicht null ist, bevor es prüft, ob 'current.myData' null ist? Also, mein Test traf den tatsächlichen Knoten (oder dessen Fehlen) vor dem Feld im Knoten? – audiobomber