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
Post a Comment