Return null breaking code

4

When I search the name of the person in the list of people right, he returns the person but when the return is null it breaks the loop of the code and shows this:

  

Exception in thread "main" java.lang.NullPointerException       at CadastroPessoa.main (CadastroPessoa.java:59) ".

What can I do to fix this?

public Pessoa pesquisar(String umNome) {
        for (Pessoa umaPessoa: listaPessoas) {
            if (umaPessoa.getNome().equalsIgnoreCase(umNome)) return umaPessoa;
        }
        return null;
    }
else if (entradaTeclado.equalsIgnoreCase("pesquisar")){

        System.out.println("Digite o nome da pessoa que você quer pesquisar:");
        entradaTeclado = leitorEntrada.readLine();
        String umNome = entradaTeclado;

        //buscando pessoa na lista de pessoas
        Pessoa umaPessoa = umControle.pesquisar(umNome);
        System.out.println(umaPessoa);
        if (!umaPessoa.equals(null)) {
            System.out.println("\n******** Pessoa encontrada com sucesso ********\n");
        }
    
asked by anonymous 05.04.2014 / 01:13

4 answers

2

No if you try to put

if (umaPessoa != null)


Well it should be in the equals that is breaking.

    
05.04.2014 / 01:23
2

You can only call a method in the variable umaPessoa if its value is not null - including umaPessoa.equals(null) . The correct way to compare a variable with null is by using the (des) equality operator ( == or != ):

if ( umaPessoa != null ) {
    
05.04.2014 / 01:23
2

equals is a method like any other.

As x.foo(y) causes an exception when x = null , also x.equals(y) does.

The correct way to check if an object is null is:

x == null

So in this case:

if (umaPessoa != null) {
    System.out.println("\n******** Pessoa encontrada com sucesso ********\n");
}
    
05.04.2014 / 01:23
2

It's not clear from your question what the 59 line looks like, but I assume it's the following:

if (umaPessoa.getNome().equalsIgnoreCase(umNome)) return umaPessoa;

So you should, as the friend @mgibsonbr put change to the following form:

public Pessoa pesquisar(String umNome) {
        for (Pessoa umaPessoa: listaPessoas) {
            if ( umaPessoa != null ) {
                if (umaPessoa.getNome().equalsIgnoreCase(umNome)) return umaPessoa;
            }
        }
        return null;
    }

and in the other code, as the friend @luiscubal put

else if (entradaTeclado.equalsIgnoreCase("pesquisar")){

        System.out.println("Digite o nome da pessoa que você quer pesquisar:");
        entradaTeclado = leitorEntrada.readLine();
        String umNome = entradaTeclado;

        //buscando pessoa na lista de pessoas
        Pessoa umaPessoa = umControle.pesquisar(umNome);
        System.out.println(umaPessoa);
        if (umaPessoa != null) {
            System.out.println("\n******** Pessoa encontrada com sucesso ********\n");
        }
    
05.04.2014 / 01:26