エラーをスローする Java のメソッドに問題があります。
Exception in thread "main" java.lang.NullPointerException
at FamilyTree$FamilyTreeNode.access$9(FamilyTree.java:5)
at FamilyTree.displayFamilyMember(FamilyTree.java:166)
at FamilyTreeTest.main(FamilyTreeTest.java:28)
問題の方法は次のとおりです。
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 for 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");
}
}
エラーをスローしている行:
if (currentNode.identifier == memberIdentifier || cascade == true || currentNode.partner.identifier == memberIdentifier){
推測として、値を確認している currentNode.partner.identifier が null / currentNode.partner ノードが存在しないため、このエラーが発生していると言えます。
これは、前の 2 つの同一のチェックが正しく機能することを妨げるものではないので、この行が異なる理由について少し困惑しています。
構造は
Alice[2] <--partner-- John[1]
|
Ted[3] --sibling--> Eric[4] --sibling--> Joanne[5]
編集:返信ありがとうございます。現在の仕組みを理解しています。
if (currentNode.identifier == memberIdentifier || currentNode.partner.identifier == memberIdentifier){