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

Return True

Amigos,

O meu script teoricamente esta funcionando, resumidamente chamando o método empresa.contem, informando o funcionario empresa.funcionarios[0], retorna false. Teoricamente não existe este funcionario no array. A minha duvida é, eu estou criando o funcionario, pela chamada: empresa.funcionarios[0] = new Funcionario(); empresa.funcionarios[0].nome = "Vitor"; E mesmo assim retorna false. O que eu tenho que fazer para a minha empresa reconhecer esse funcionario e retornar true ?

package Exercícios;

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

    void imprimeFuncionarios(){
          for(int i = 0; i < 10; i++){
            Funcionario funcionario = this.funcionarios[i];
            if(funcionario == null) continue;
            System.out.println(this.funcionarios[i].nome);
        }
    }

    void mostraEmpregados(){
            for(int b = 0; b < this.funcionarios.length; b++){
            System.out.println(this.funcionarios[b].nome);
            }
        }

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

    void mostraPosicaoLivre(){
            for(int c = 0; c < this.livre; c ++){
            System.out.println(this.livre);

            }
    }

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

}

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

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

        //@Override
        //public String toString(){
        //   return dia + "/" + mes + "/" + ano;

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

        }
}

class Funcionario{
    String nome;
    String departamento;
    int salario;
    int RG;    
    Data dataDeEntrada;

    void recebeAumento(double valor){
        //double novoSalario= this.salario + valor;
        //this.salario = novoSalario;
        this.salario += valor;
    }

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

    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.dataDeEntrada.getFormatada());
        System.out.println("RG: " + this.RG);
        System.out.println("Ganho Anual: " + this.calculaGanhoAnual());
     }

}


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

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

        empresa.funcionarios[0] = new Funcionario();
        empresa.funcionarios[0].nome = "Vitor";                                  

        System.out.println(empresa.contem(empresa.funcionarios[0]));


    }
}
2 respostas
solução!

Boa tarde, Vitor! Tudo bem, cara? =)

Seu método contem() está assim:

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

Basicamente o que ele está fazendo é percorrendo o array funcionarios até encontrar a posição livre, inicialmente zerada.

Quando você adiciona um Funcionario fazendo empresa.funcionarios[0] = new Funcionario(), você não atualizou a variável livre. Para tanto, você deveria utilizar o método adiciona():

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

Repare que ele recebe um Funcionário como parâmetro e ele é responsável por incluí-lo no array e atualizar a posição livre.

Então o que você deveria fazer é algo assim:

class TestaEmpresa{
    public static void main(String[] args){
        Empresa empresa = new Empresa();
        empresa.funcionarios = new Funcionario[10];  

        Funcionario funcionario = new Funcionario();
        funcionario.nome = "Vitor";

        empresa.adiciona(funcionario);

        System.out.println(empresa.contem(funcionario));
    }
}

Espero ter ajudado, mas qualquer dúvida não deixe de postar por aqui para podermos ajudá-lo! =)

Abraço e bons estudos,

Fábio

Vlw Fabio.

Obrigado pelo esclarecimento.

Só acrescentei o código abaixo:

empresa.adiciona(empresa.funcionarios[0]);

Desta forma veio true. Show.