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

Duvida Exercicio 4 Arrays

Cara honestamente nao sei o que esta acontecendo que não sai nada na execucao nem erro segue codigo;

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

    void adicionar(Funcionario f){
        for (int i=0; i < this.funcionarios.length; i++){
            if(this.funcionarios[i]==null){
                this.funcionarios[i]= f;
            }else{
                continue;
            }
        }
    }

    void mostraEmpregados(){
        for(int i=0; i< this.livre; i++){
            System.out.println("CodFuncionario: "+i);
            System.out.println(this.funcionarios[i].salario);
        }
    }
}

public class Funcionario {

    String funcionario;
    String rg;
    Data dataAdmissao;
    String departamento;
    double salario;

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

    void calculaGanhoAnual(double salarioAnual){
        this.salario = this.salario * 12;
        System.out.println("Salario Anual R$: "+this.salario);
    }
    void mostra(){

        System.out.println("Nome do Funcionário: "+this.funcionario);
        System.out.println("R.G: "+this.rg);
        System.out.println("Departamento: "+this.departamento);
        System.out.println("Salario: R$ "+this.salario);
        System.out.println("Data Admissão: "+this.dataAdmissao.dia+"/"+this.dataAdmissao.mes+"/"+this.dataAdmissao.ano);
    }

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


}

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

        Empresa tatico = new Empresa();
        tatico.cnpj = "37.136.959/0001-69";
        tatico.razaoSocial = "Itatico Coml de Alim. Ltda";
        tatico.Telefone = "2109-0200";

        tatico.funcionarios = new Funcionario[2];



        Funcionario f1 = new Funcionario();
        f1.dataAdmissao = new Data();
        f1.funcionario = "Washington luiz";
        f1.departamento = "Tecnologia";
        f1.rg = "1.585.742";
        f1.salario = 2000;
        f1.dataAdmissao.dia = 1;
        f1.dataAdmissao.mes = 1;
        f1.dataAdmissao.ano = 2000;
        tatico.adicionar(f1);

        Funcionario f2 = new Funcionario();
        f2.dataAdmissao = new Data();
        f2.funcionario = "Axarafy dos Santos";
        f2.departamento = "Tecnologia";
        f2.rg = "1.999.742";
        f2.salario = 5000;
        f2.dataAdmissao.dia = 21;
        f2.dataAdmissao.mes = 4;
        f2.dataAdmissao.ano = 2010;
        tatico.adicionar(f2);

        tatico.mostraEmpregados();


    }
}
4 respostas

Tudo bem ? Vi que a variável membro livre da classe Empresa é utilizada no for do método mostraEmpregados. Porém essa variável está sempre com valor zero. O que você pode fazer é alterar essa variável a medida que insere elementos no array, ou então utilizar this.funcionarios.length igual no método adicionar.

Creio que esse seja o erro da lógica. Depois dá um feedback aê. Espero ter ajudado!

É interessante observar que o tamanho do array será, no caso desse código, sempre 2! Mesmo antes de inserir os funcionários o tamanho desse array já é 2, pois foi assim que ele foi iniciado. Ou seja, mesmo que não exista nenhum funcionário no array o for iria iterar por valores nulos.

Sendo assim, o ideal é incrementar o atributo livre a cada inserção de um novo funcionário para que o for do método mostraEmpregados funcione como esperado, ou, caso se opte por escolher a abordagem sugerida pelo Mateus de utilizar this.funcionarios.length, é melhor que se implemente o for dessa forma:

for (int i = 0; i < this.funcionarios.length && this.funcionarios[i] != null; i++) {
    //restante do código
}

Grande abraço!

Amigao, obrigado pela orientaçao porem o problema agora se tornou outro eu tenho 2 funcionarios porem esta repetindo o primeiro, mas o i ta incrementando segue codigo

class Empresa{
        String razaoSocial;
        String cnpj;
        String Telefone;
        Funcionario[] funcionarios;

    void adicionar(Funcionario f){
        for (int i=0; i < this.funcionarios.length; i++){
            if(this.funcionarios[i]==null){
                this.funcionarios[i]= f;
            }else{
                continue;
            }
        }
    }

    void mostraEmpregados(){
        for(int i=0; i< this.funcionarios.length && this.funcionarios[i] != null; i++){
            Funcionario empregado = this.funcionarios[i];
            if(empregado== null) continue;
            System.out.println("CodFuncionario: "+i);
            System.out.println(empregado.salario);
            System.out.println(empregado.funcionario);
            System.out.println(empregado.departamento);
        }
    }
}

public class Funcionario {

    String funcionario;
    String rg;
    Data dataAdmissao;
    String departamento;
    double salario;

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

    void calculaGanhoAnual(double salarioAnual){
        this.salario = this.salario * 12;
        System.out.println("Salario Anual R$: "+this.salario);
    }
    void mostra(){

        System.out.println("Nome do Funcionário: "+this.funcionario);
        System.out.println("R.G: "+this.rg);
        System.out.println("Departamento: "+this.departamento);
        System.out.println("Salario: R$ "+this.salario);
        System.out.println("Data Admissão: "+this.dataAdmissao.dia+"/"+this.dataAdmissao.mes+"/"+this.dataAdmissao.ano);
    }

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


}

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

        Empresa loja = new Empresa();
        loja.cnpj = "37.136.959/0001-69";
        loja.razaoSocial = "Itatico Coml de Alim. Ltda";
        loja.Telefone = "2109-0200";

        loja.funcionarios = new Funcionario[2];



        Funcionario f1 = new Funcionario();
        f1.dataAdmissao = new Data();
        f1.funcionario = "Washington luiz";
        f1.departamento = "Tecnologia";
        f1.rg = "1.585.742";
        f1.salario = 2000;
        f1.dataAdmissao.dia = 1;
        f1.dataAdmissao.mes = 1;
        f1.dataAdmissao.ano = 2000;
        loja.adicionar(f1);

        Funcionario f2 = new Funcionario();
        f2.dataAdmissao = new Data();
        f2.funcionario = "Axarafy dos Santos";
        f2.departamento = "Tecnologia";
        f2.rg = "1.999.742";
        f2.salario = 5000;
        f2.dataAdmissao.dia = 21;
        f2.dataAdmissao.mes = 4;
        f2.dataAdmissao.ano = 2010;
        loja.adicionar(f2);

        loja.mostraEmpregados();


    }
}
solução!

Boa tarde, Washington! Como vai?

Esse problema está acontecendo pela forma como vc implementou o método adicionar na classe Empresa. Repare que nesse método, vc percorre todo o array procurando por um null e então insere o funcionário. Ou seja, no primeiro funcionário que vc pedir pra adicionar, o método vai percorrer o array procurando por um null, ao encontrar vai inserir o funcionário e depois vai continuar procurando outros null e, se encontrar, vai novamente inserir o mesmo funcionário.

Para resolver o problema, sem mudar a forma como vc implementou o método, o código deveria incluir um break, dessa forma:

void adicionar(Funcionario f){
    for (int i=0; i < this.funcionarios.length; i++){
        if(this.funcionarios[i]==null){
            this.funcionarios[i]= f;
            break;
        }else{
            continue;
        }
    }
}

Grande abraço!