6
respostas

Ajuda com o método contem

Boa noite. Fiz o método contém e queria testar a funcionalidade dele. Para isso inclui um enhanced for na classe testa que adiciona os funcionários e imprime conforme o retorno do método, porém creio que alguma coisa de muito errada não está certa. Criei dois funcionários idênticos e ao rodar o programa, aparece duas vezes a mensagem "Funcionario já cadastrado" e por fim a mensagem "Funcionário inserido com sucesso". Se eu mudar um dos funcionários a saída é a mesma. Seguem as classes:

class Data{
    int dia;
    int mes;
    int ano;

    void recebeData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String dataFormatada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}
class Funcionario{

    String nome;
    String departamento;
    double salario;
    //String dataDeEntradaNoBanco;
    Data data;
    String rg;

    void recebeAumento(double aumento){
        this.salario += aumento;
    }

    double calculaGanhoAnual(){
        return this.salario * 12.0;
    }

    void mostra(){
        System.out.println("Nome:         " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salario:      " + this.salario);
        System.out.println("Data de entrada: " + this.data.dataFormatada());
        System.out.println("RG:           " + this.rg);
        System.out.println("Ganho Anual:  " + this.calculaGanhoAnual()+"\n");
    }
}

class Empresa{

    String nome;
    String cnpj;
    Funcionario[] funcionarios;

    int controleFunc = 0;

    void adiciona(Funcionario f){
        this.funcionarios[this.controleFunc] = f;
        this.controleFunc++;
    }

    void mostraEmpregados(){
        for(int i = 0; i < this.funcionarios.length; i++){
            if(this.funcionarios[i] != null){
                this.funcionarios[i].mostra();
            } continue;
        }
    }

    boolean contem(Funcionario f){
        for(int i=0; i<this.funcionarios.length; i++){
            if(f == this.funcionarios[i]){
                return true;
            } 
        } return false;
    }
}
class TestaEmpresa{
    public static void main(String[] args){

        Empresa empresa = new Empresa();
        empresa.funcionarios = new Funcionario[2];

        /*for(int i = 0; i < 11; i++){
            Funcionario f = new Funcionario();
            f.salario = 1000 + i * 50;
            empresa.adicionar(f);
        }*/
        Funcionario f1 = new Funcionario();
        f1.nome = "Teste";
        f1.salario = 10000;
        f1.departamento = "Tecnologia";
        f1.data = new Data();
        f1.data.recebeData(1,11,2016);
        f1.rg = "12345678909";
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.nome = "Teste2";
        f2.salario = 10000;
        f2.departamento = "Tecnologia";
        f2.data = new Data();
        f2.data.recebeData(1,11,2016);
        f2.rg = "12345678909";
        empresa.adiciona(f2);

        empresa.mostraEmpregados();

        for(Funcionario x : empresa.funcionarios){
            empresa.contem(x);
            if(empresa.contem(x) == true){
                System.out.println("Funcionario ja cadastrado");
            } 
        } System.out.println("Funcionario adicionado com sucesso");
    }
}
6 respostas

Oi Samuel, vc queria que fosse qual saída? Você criou 2 objetos diferentes com informações iguais.. A comparação feita com == apenas compara as referências, que nesse caso, são diferentes. Mais para frente no curso vc vai conhecer o método equals e outra maneira de comparar objetos que, aí sim, vai verificar os valores do objeto e não o endereço de memória.

O que eu gostaria era testar o método contem. Criar os objetos e com o retorno do método contem imprimir se existe ou não.

Você precisa comparar os valores do objeto e não as referências.

Para fazer isso eu preciso sobrescrever o método equals() comparando cada propriedade, correto?

Exato! Comparando as informações que vc deseja.

Tá, agora a confusão ficou por conta do método contem. Qual o sentido dele, já que eu não consigo comparar as informações dos objetos?