2
respostas

Dúvida no Ex. 6 da Aula 4 - Arrays

Ola pessoal!

Lá no final do código eu faço uso do método contem() da classe empresa no objeto f6 e ele retorna false mesmo o f6 sendo copia do f3. Ele não deveria retornar true, sendo que o f6 e o f3 tem os mesmos valores para os atributos?

class Funcionario{
    String nome;
    double salarioBase;
    double salarioBruto;
    double salarioLiquido;
    double salarioAnual;
    String rg;
    String funcao;
    String cargo;
    String lotacao;
    String departamento;
    double bonus;
    double desconto;
    double desempenhoFuncionario;

    void recebeAumento(double aumento){

        this.salarioBase += aumento;
    }

    double salarioAnual(){
        return this.salarioBase*12;
    }

    void bonifica(){
        if(this.desempenhoFuncionario >= 120)
        {
            this.bonus += this.salarioBase * 0.1;
        }else{
            this.bonus = 0;
        }
    }

    void salarioMes(){
        this.salarioBruto = this.salarioBase + this.bonus;
        this.salarioLiquido = this.salarioBruto - this.desconto;
    }
    Data dataDeEntrada = new Data();
    void mostra(){
        this.bonifica();
        this.salarioMes();
        System.out.println("Data de Admissão "
                                +this.dataDeEntrada.dia+"/"
                                +this.dataDeEntrada.mes+"/"
                                +this.dataDeEntrada.ano+"/"
                            +"\nsalario Base: " + this.salarioBase
                            +"\nbonus: " + this.bonus
                            +"\ndesconto: " + this.desconto
                            +"\nsalario Bruto: " + this.salarioBruto
                            +"\nsalario Liquido: " + this.salarioLiquido
                            +"\nsalario Anual: " + salarioAnual()
                                                        +"\n");
    }    
}

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

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

    String getFormatada(){
        return this.dia+"/"+this.mes+"/"+this.ano;
    }
}

class Empresa{
    String nome;
    String cnpj;
    Funcionario[] empregado;
    int livre = 0;

    void adiciona(Funcionario f){
        this.empregado[this.livre] = f;
        this.livre++;
    }

        void mostraEmpregado(){
            for (int i=0; i<this.livre; i++){
                System.out.println("Funcionário na posição: "+i
                                    +"\nNome: "+this.empregado[i].nome
                                    +"\nSalario base: "+this.empregado[i].salarioBase
                                    +"\n");
            }
        }

        void mostraTodasAInformacao(){
            for (int i=0; i<this.livre; i++){
                this.empregado[i].mostra();
            }
        }

        boolean contem(Funcionario f){
            for(int i=0; i<this.livre;i++){
                if(f == this.empregado[i]){
                    return true;
                }
            }
            return false;
        }
}

class exercicio406{

    public static void main(String[] args) {

        Empresa empresa01 = new Empresa();
        empresa01.empregado = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.dataDeEntrada = new Data();

        f1.dataDeEntrada.preencheData(8, 3, 2015);
        f1.nome = "Francisco";
        f1.departamento = "Administrativo";
        f1.salarioBase = 3500;
        f1.rg = "2r365894";
        f1.recebeAumento(155);
        f1.desempenhoFuncionario = 135;
        empresa01.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.dataDeEntrada = new Data();

        f2.dataDeEntrada.preencheData(20, 8, 2013);
        f2.nome = "Felipe";
        f2.departamento = "Administrativo";
        f2.salarioBase = 2900;
        f2.rg = "598672";
        f2.recebeAumento(189);
        f2.desempenhoFuncionario = 145;
        empresa01.adiciona(f2);

        Funcionario f3 = new Funcionario();
        f3.dataDeEntrada = new Data();

        f3.dataDeEntrada.preencheData(8, 3, 2015);
        f3.nome = "Rodrigo";
        f3.departamento = "Operacional";
        f3.salarioBase = 2800;
        f3.rg = "2r857952";
        f3.recebeAumento(120);
        f3.desempenhoFuncionario = 145;
        empresa01.adiciona(f3);

        Funcionario f4 = new Funcionario();
        f4.dataDeEntrada = new Data();

        f4.dataDeEntrada.preencheData(2, 12, 2011);
        f4.nome = "Felipe";
        f4.departamento = "Operacional";
        f4.salarioBase = 2800;
        f4.rg = "2r85895";
        f4.recebeAumento(130);
        f4.desempenhoFuncionario = 140;
        empresa01.adiciona(f4);

        Funcionario f5 = new Funcionario();
        f5.dataDeEntrada = new Data();

        f5.dataDeEntrada.preencheData(12, 5, 2012);
        f5.nome = "Thiago";
        f5.departamento = "Operacional";
        f5.salarioBase = 2800;
        f5.rg = "596823";
        f5.recebeAumento(150);
        f5.desempenhoFuncionario = 145;
        empresa01.adiciona(f5);

        Funcionario f6 = new Funcionario();
        f6.dataDeEntrada = new Data();

        f6.dataDeEntrada.preencheData(12, 5, 2012);
        f6.nome = "Thiago";
        f6.departamento = "Operacional";
        f6.salarioBase = 2800;
        f6.rg = "596823";
        f6.recebeAumento(150);
        f6.desempenhoFuncionario = 145;

        System.out.println(empresa01.contem(f5));
        System.out.println(empresa01.contem(f6));

    }(
}
2 respostas

Olá!

Para que o:

System.out.println(empresa01.contem(f6));

Retorne true, é preciso adicionar esse funcionário na empresa, como você fez com os outros funcionários:

empresa01.adiciona(f6);

Att. Renato.

Oi!

a comparação de objetos usando o == basicamente verifica se o endereço de memória são iguais!

Se você deseja saber se já existe um Funcionario com as mesmas características desse outro funcionario, será necessário sobrescrever esse método Equals na sua classe funcionário, e lá você define como será essa comparação! E então deve-se comprar utilizando esse método.

Acredito que esse recurso será apresentado um pouco mais pra frente!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software