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

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

Olá Pessoal... O meu método boolean "contem(Funcionarios f) "não está retornando true e nem false, segue classe empresa e teste :

public class Empresa {

    String nome;
    String cnpj;
    Funcionarios Arrayfuncionarios[];
    int livre = 0;

    void adicionaFuncionario(Funcionarios f) {
        this.Arrayfuncionarios[this.livre] = f;
        this.livre++;
    }

    void mostraFuncionariosEmpresa() {

        for (int i = 0; i < this.livre; i++) {
            if (Arrayfuncionarios[i] == null)
                continue;
            System.out.print("Funcionario na posição " + i + " : ");
            // System.out.println(Arrayfuncionarios[i].nome + " com salário de R$" + Arrayfuncionarios[i].salario);
            Arrayfuncionarios[i].mostraFuncionario();

        }
    }

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



public class Teste {
    public static void main(String[] args) {

        Empresa citel = new Empresa(); // criando a empresa citel
        citel.Arrayfuncionarios = new Funcionarios[10]; // criando array de funcionarios da empresa citel



        Funcionarios f001 = new Funcionarios(); // criando funcionario f001
        f001.dataEntradaFunc = new Datas();

        // atributos de f001
        f001.nome = "Hugo";
        f001.id = "1234";
        f001.rg = "12.345.678-09";
        f001.salario = 4200.0;
        f001.empresa = "CitelGroup";
        f001.dataEntradaFunc.preencheData(8, 9, 2016);

        //atributos f002
        Funcionarios f002 = new Funcionarios();
        f002.dataEntradaFunc = new Datas();
        f002.nome = "Adriano";
        f002.salario = 9000.0;
        f002.empresa = "CitelGroup";

        Funcionarios f004 = new Funcionarios();

        citel.adicionaFuncionario(f001); // adicionando funcionario em array de
                                            // empresa
        citel.adicionaFuncionario(f002);

    citel.contem(f004);

    }

}
4 respostas

Oi Daniel,

Não sei se você sobreesceveu o método "equals" de sua classe Funcionario. Caso não, faça isso para que ele compare pelo CNPJ e mude o if do método "contem", conforme descrito abaixo:

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        FuncionarioActivity that = (FuncionarioActivity) o;

        return cnpj.equals(that.cnpj);

    }
    boolean contem(Funcionarios f) {
        for (int i = 0; i < this.livre -1; i++) {
            if (f.equals(Arrayfuncionarios[i])) {  // Agora utiliza o método equals da classe Funcionario
                return true;
            }
        }
        return false;
    }

Abs.

solução!

Desculpe, inseri um erro no segundo método. Estou reenviando:

boolean contem(Funcionarios f) {
        for (int i = 0; i < this.livre ; i++) { // Não tem o -1
            if (f.equals(Arrayfuncionarios[i])) {  // Agora utiliza o método equals da classe Funcionario
                return true;
            }
        }
        return false;
    }

Abs.

Daniel, boa noite.

Formatei o seu código, só peço que verifique a formatação pois é muito importante para que as pessoas possam te ajudar da melhor forma.

Antes de postar uma pergunta você pode clicar em formatação, ao lado de expandir e ver as regras de formatação.

A resposta do Rogério já resolve sua dúvida e eu estou postando o meu método também, caso tenha alguma dúvida.

A equipe Alura agradeçe, e tenha ótimos estudos!

Obrigado Rogério pela contribuição também!

Daniel, por favor. Marcar uma resposta como solução do problema após ter tirado todas suas dúvidas.

Disponha.

Segue o método:

boolean verificaFuncionario(FuncionarioArray f){
        for(int i = 0; i < this.posicaoLivre; i++){
            if(f == this.empregados[i]){
                return true;
            }
        }

        return false;
    }

Obrigado pessoal pela ajuda.

Desculpem pela formatação, não prestei atenção nisso. De novo muito obrigado, vlw