2010-11-27 7 views
2
private void Scan(DoublyLinkedList dList) { // T(n) = O(n) 
    DNode p1 = dList.getFirst(); 

    while (p1 != null) { 
     DNode p2 = p1.next; 
     System.out.println(p1.getElement().toString()); // <--- Here it throws NullPointerException. 

     if (p2.next != null) { 
      DNode p3 = p2.next; 

      if (p3.getElement() != null) { 
       boolean b = Determinate.isPointRightSide(p1.getElement(), p2.getElement(),p3.getElement()); 

       if (b == true) { 
        p1 = p1.next; 
       } else { 
        p1.next = p3; 
        p3.prev = p1; 
        dList.remove(p2); 
        p1 = p1.prev; 
       } 
      } else break; 
     }else break; 
    } 
} 

l'exception:Condition dans la boucle while ne fonctionne pas?

run: 
Exception in thread "main" java.lang.NullPointerException 
X :8.0 Y: 9.0angle0.0lol 
     at ConvexHull.GrahamVersion.Scan(GrahamVersion.java:102) 
     at ConvexHull.GrahamVersion.grahamScan(GrahamVersion.java:83) 
     at ConvexHull.GrahamVersion.<init>(GrahamVersion.java:25) 

Il jette NullPointerException sur System.out.println(p1.getElement().toString());. Cela signifie qu'il ne fait pas attention à la condition de boucle while?

+0

En général, vous n'avez pas besoin de faire un appel 'toString()' sur un objet lorsque vous le passez dans la fonction 'println()' d'un 'PrintWriter' (comme' System.out'). La fonction convertira implicitement l'objet en un 'String' par lui-même. –

+0

Par ['String # valueOf()'] (http://download.oracle.com/javase/6/docs/api/java/lang/String.html#valueOf%28java.lang.Object%29), en fait , qui fait implicitement la vérification du pointeur nul. – BalusC

+0

Ressemble assez similaire à http://stackoverflow.com/questions/4289981/about-null-pointer-exception –

Répondre

4

p1 n'est pas null, mais p1.getElement() a renvoyé null.

Supprimez l'appel toString(). Vous n'en avez pas besoin dans sysout. Il va alors simplement imprimer null comme "null".

+0

OK Je veux gérer cela s'il n'y a pas d'élément dans le p1, ne pas aller à la boucle while, je devrais utilisez p1.getElement()! = null? – user472221

+0

Essayez-le ou posez simplement une nouvelle question. – BalusC

0

La condition dans la boucle whilefonctionne. Le NullPointerException est jeté sur p1.getElement(), qui est null et ne peut donc pas être déréférencé. Si p1 étaient null, la ligne au-dessus (p2 = p1.next) échouerait.

Questions connexes