tree - Java: Inconsistent NullPointerException -


i having trouble method in java thats throwing error:

exception in thread "main" java.lang.nullpointerexception @ familytree$familytreenode.access$9(familytree.java:5) @ familytree.displayfamilymember(familytree.java:166) @ familytreetest.main(familytreetest.java:28) 

the method in question is:

public void displayfamilymember(){       boolean cascade = false;          int memberidentifier;                    displayfamily();      memberidentifier = input.getinteger("input member id");      currentnode = ancestor ;         if (currentnode.identifier == memberidentifier || currentnode.partner.identifier == memberidentifier){             cascade = true;             if(currentnode.partner!= null){                 system.out.println(currentnode.name + " id[" + currentnode.identifier + "] partner:  " + currentnode.partner.name + " id[" + currentnode.partner.identifier + "]");                 }else{                     system.out.println(currentnode.name + " id[" + currentnode.identifier + "] has no partner");                 }             }                    if(currentnode.child != null){                                                currentnode = currentnode.child;                                     if (currentnode.identifier == memberidentifier || cascade == true || currentnode.partner.identifier == memberidentifier){                                            if(currentnode.partner!= null){                             system.out.println("     " + currentnode.name + " id[" + currentnode.identifier + "] partner:  " + currentnode.partner.name + " id[" + currentnode.partner.identifier + "]");                             }else{                                 system.out.println("     " + currentnode.name + " id[" + currentnode.identifier + "] has no partner");                             }                      }         }                         if (currentnode.sibling!= null){              while(currentnode.sibling != null){                                          currentnode = currentnode.sibling;                                      if (currentnode.identifier == memberidentifier || cascade == true || currentnode.partner.identifier  == memberidentifier){                      system.out.println("check match performed, checking partner !- null");                                       if(currentnode.partner!= null){                             system.out.println("     " + currentnode.name + " id[" + currentnode.identifier + "] partner:  " + currentnode.partner.name + " id[" + currentnode.partner.identifier + "]");                             }else{                                 system.out.println("     " + currentnode.name + " id[" + currentnode.identifier + "] has no partner");                             }                          }                  }                  }          else{             system.out.println("member not found");         }   } 

the line throwing error:

 if (currentnode.identifier == memberidentifier || cascade == true || currentnode.partner.identifier == memberidentifier){   

now guess, i'm getting error, because currentnode.partner.identifier, i'm checking value of, null / currentnode.partner node doesn't exist.

this doesn't prevent previous 2 identical checks functioning correctly, i'm bit perplexed why line different.

the structure is

alice[2] <--partner-- john[1]                       |                    ted[3] --sibling--> eric[4] --sibling--> joanne[5] 

edit: replies, understand how works now.

if (currentnode.identifier == memberidentifier || currentnode.partner.identifier == memberidentifier){ 

on first node, line should throw exception, doesn't because first condition met , others don't checked. referencing currentnode.partner.identifier while currentnode.partner = null problem.

after looking @ code, reason i'd expect specific line throw null reference error if currentnode.partner null.

the reason why it's different every time, because keep changing currentnode so

currentnode = currentnode.sibling;   

additionally, if if condition looks if (a || b) true when a true regardless of b is, won't check b when a true.

because of behavior , it's inverse &&, might see conditions like

if(myobj != null && myobj.value == otherval) 

your previous line might never have executed

currentnode.partner.identifier == memberidentifier

if currentnode.identifier == memberidentifier or cascade true


because of this, if exact same line executed when currentnode.partner not null, might not case after change currentnode


if you, i'd find java debugger, , put breakpoint before error occurs.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -