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

Não imprime os funcionários

Boa noite. No exercício 4 do capitulo 4, não imprime nada no console. No exercício 3 estava ok. Segue o código.

class Funcionario{

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

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

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

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 = 1; i < this.funcionarios.length; i++){
            if(this.funcionarios[i] != null){
                System.out.println("Nome: "             + this.funcionarios[i].nome);
                System.out.println("Departamento: "     + this.funcionarios[i].departamento);
                System.out.println("Salario: "             + this.funcionarios[i].salario);
                System.out.println("Data de entrada: "    + this.funcionarios[i].data.dataFormatada());
                System.out.println("RG: "                + this.funcionarios[i].rg);
                System.out.println("Ganho anual: "        + this.funcionarios[i].calculaGanhoAnual()+"\n");
            } continue;
        }
    }
}

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

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

        /*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 = 6000;
        f1.departamento = "Desenvolvimento";
        f1.data = new Data();
        f1.data.recebeData(27,10,2016);
        f1.rg = "12345678898";
        empresa.adiciona(f1);

        empresa.mostraEmpregados();
    }
}
4 respostas

Samuel, posta sua classe Data também, pra gente compreender melhor.

Segue a classe Data:

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;
    }
}
solução!

Olá Samuel!

O problema é que o seu laço for começa em 1! Lembre-se de que as posições dos arrays sempre começam em 0, ou seja, um array de tamanho 10, vai se 0 a 9!.

Como você só adicionou 1 único funcionário, ele está na posição 0 do array, mas no laço ele está imprimindo o funcionario da posição 1, e ele não existe!

Altere o seu laço para começar do 0.

 void mostraEmpregados(){
        for(int i = 0; i < this.funcionarios.length; i++){
            if(this.funcionarios[i] != null){
                System.out.println("Nome: "             + this.funcionarios[i].nome);
                System.out.println("Departamento: "     + this.funcionarios[i].departamento);
                System.out.println("Salario: "             + this.funcionarios[i].salario);
                System.out.println("Data de entrada: "    + this.funcionarios[i].data.dataFormatada());
                System.out.println("RG: "                + this.funcionarios[i].rg);
                System.out.println("Ganho anual: "        + this.funcionarios[i].calculaGanhoAnual()+"\n");
            } continue;
        }
    }

Nossa, que erro grotesco. Deixei assim por conta de um teste que eu estava fazendo no exercício anterior. Obrigado pela ajuda.