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