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

Asked

Viewed 154 times

2

I’m trying to implement a family tree in Java but I ended up facing this problem that I don’t know how to 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?

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;
    }
}
  • Felipe, the response of Renan Araujo seems good, just stay tuned in the exclamations according to the test you need...

1 answer

4


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

You must 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());
    }
}
  • @Luisalbertobatista Thanks for the remark Luis, I changed the answer.

  • Good balcony! We are there!!! Hug.

  • 1

    Oops, Renan! Thank you so much for your help. I fixed my code according to your recommendation and now it’s working normally.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.