Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Tentando criar Método contem de outro jeito. Alguém ajuda?

Oi! tentei criar o metodo contem de outro jeito para praticar, mas não consegui fazer funcionar.

Alguém me dá uma luz? o metodo está sempre retornando false.

E tive que colocar "if (x != null)" pra conseguir funcionar...

boolean contem(Funcionario f){
        boolean teste = false;
        for (Funcionario x : this.funcionarios){
            if (x != null){
                if (x.nome == f.nome) {
                    teste = true;
                }
            }
        }

        System.out.println(teste);
        if (teste == true){
            return true;
        }else {
            return false;
        }

     }
2 respostas

O x!=null é pq deve ter ainda posição nula no seu array, isso é ok. Coloca um System.out.println dentro do seu imprimindo os nomes e confere?

solução!

A questão do nulo do funcionário o Alberto já explicou.

Sua comparação não funciona porque está utilizando a referência da String nome na comparação. String são imutáveis, logo sempre terão instâncias únicas. Esta forma de comparação sempre retornará false.

O que deve fazer é utilizar o método equals que pertence à Object, pai de qualquer classe java. Desta forma você utilizará a forma de comparação implementada por uma classe String.

for (Funcionario x : this.funcionarios){
  if (x != null){
    if (x.nome.equals(f.nome)) {
      teste = true;
    }
  }
}

Com o código acima você conseguirá o resultado que precisa. Porém, se o nome do funcionário x for nulo, terá um erro de execução chamado NullPointerException. Para evitar isso basta verificar isso antes da comparação como feito no código abaixo.

for (Funcionario x : this.funcionarios){
  if (x != null){
    if (x.nome !=null && x.nome.equals(f.nome)) {
      teste = true;
    }
  }
}

Espero ter ajudado. Bons estudos.