Problem with "Exception in thread" main "java.lang.NullPointerException" in recursion

2

I'm trying to implement a genealogical tree in Java but I came across this problem that I can not solve:

Exception in thread "main" java.lang.NullPointerException
   at Arvore.antecessores(Arvore.java:11)
   at Arvore.antecessores(Arvore.java:12)
   at Arvore.antecessores(Arvore.java:12)
   at Main.main(Main.java:14)

Does anyone have any idea how to solve it?

public class Main {
    public static void main(String[] args) {
        Arvore genealofica = new Arvore();
        Pessoa joao = new Pessoa("Joao", null, null);
        Pessoa maria = new Pessoa("Maria", null, null);
        Pessoa adele = new Pessoa("Adele", maria, joao);
        Pessoa barney = new Pessoa("Barney", null, adele);

        genealofica.adicionar(joao);
        genealofica.adicionar(maria);
        genealofica.adicionar(adele);
        genealofica.adicionar(barney);

        genealofica.antecessores(barney);
    }
}

///////////////////////////////

import java.util.ArrayList;

public class Arvore {
    ArrayList<Pessoa> arvoreGenealogica = new ArrayList<Pessoa>();

    public void adicionar(Pessoa qualquer){
        arvoreGenealogica.add(qualquer);
    }

    public void antecessores(Pessoa a){
        if(!a.getPai().equals(null)){
            antecessores(a.getPai());
        }
        if(!a.getMae().equals(null)){
            antecessores(a.getMae());
        }
        else {
            System.out.println(a.getNome());
        }
    }
}

//////////////////////////////////

public class Pessoa {
    private String nome;
    private Pessoa mae;
    private Pessoa pai;

    public Pessoa(String nome, Pessoa mae, Pessoa pai){
        setMae(mae);
        setPai(pai);
        setNome(nome);
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }


    public void setMae(Pessoa mae) {
        this.mae = mae;
    }

    public Pessoa getMae() {
        return mae;
    }

    public void setPai(Pessoa pai) {
        this.pai = pai;
    }

    public Pessoa getPai() {
        return pai;
    }
}
    
asked by anonymous 29.09.2018 / 05:49

1 answer

4

The error occurs when performing the null.equals (null) operation when trying to get Barney's father.

You should use operator == to check the reference and not the value.

public void antecessores(Pessoa a){
    if(a.getPai() != null){
        antecessores(a.getPai());
    }
    if(a.getMae() != null){
        antecessores(a.getMae());
    }
    else {
        System.out.println(a.getNome());
    }
}
    
29.09.2018 / 06:11