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

Só imprimi o funcionario na posição 1 do Array:

Olá, estou com um problema na atividade, meu código está compilando porém só imprimi o funcionário na posição 1, queria uma ajuda.

Segue o código:

class Empresa {

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

    void adiciona(Funcionario f) {

        this.funcionarios[this.livre] = f;
        this.livre++;

    }

    void mostraEmpregados() {

        for(int i = 0; i < this.funcionarios.length; i++) {

            Funcionario funcionario = this.funcionarios[i];

            if(funcionario == null) continue;

                System.out.println("Funcionario na posicao: " + i);
                System.out.println("R$" + funcionario.salario);

        }

    }

    void imprimeEmpresa() {
        System.out.println();
        System.out.println("Empresa " + this.nome);
        System.out.println();
        System.out.println("CPJ: " + this.cnpj);
        System.out.println();

        for(int i = 0; i < this.funcionarios.length; i++) {

            Funcionario funcionario = this.funcionarios[i];

            if(funcionario == null) continue;

            System.out.println("Nome do Funcionario: " + funcionario.nome);
            System.out.println();
            System.out.println("Funcao: " + funcionario.funcao);
            System.out.println();
            System.out.println("Tem salario de: " + funcionario.salario);
            System.out.println();
            System.out.println("Data de entrada na empresa: " + funcionario.dataDeEntrada.getFormatada);
        }
    }
}

class Funcionario {

    String nome;
    String funcao;
    double salario;
    Data dataDeEntrada;

}

class Data { 

    String getFormatada;

    void getFormatada(int dia, int mes, int ano) { 

        this.getFormatada = dia + "/" + mes + "/" + ano;
    }
}

class TestaEmpresa {

    public static void main(String[] args) {

    //====================================================================//
        //Criando uma nova empresa.
        Empresa emp1 = new Empresa();
            emp1.nome = "Comercial Carvalho";
            emp1.cnpj = "10.354.987/0003-38";
    //====================================================================//

    //====================================================================//
        //Criando um novo Array de Funcionario;
        Funcionario func0 = new Funcionario();
        emp1.funcionarios = new Funcionario[10];

        // Criando o 1º funcionario;
        emp1.funcionarios[0] = new Funcionario();
            emp1.funcionarios[0].nome = "Mauricio";
            emp1.funcionarios[0].funcao = "Motorista";
            emp1.funcionarios[0].salario = 3560;

        emp1.funcionarios[0].dataDeEntrada = new Data();
            emp1.funcionarios[0].dataDeEntrada.getFormatada(20, 10, 2014);

        emp1.adiciona(emp1.funcionarios[0]); // adicionando o funcionario no Array.
    //====================================================================//

    //====================================================================//

        //Criando um novo funcionario;

        Funcionario func1 = new Funcionario();
        emp1.funcionarios = new Funcionario[10];

        emp1.funcionarios[1] = new Funcionario();
            emp1.funcionarios[1].nome = "Felipe";
            emp1.funcionarios[1].funcao = "Bebezinho";
            emp1.funcionarios[1].salario = 5000;

        emp1.funcionarios[1].dataDeEntrada = new Data();
            emp1.funcionarios[1].dataDeEntrada.getFormatada(30,05,2015);


        emp1.adiciona(emp1.funcionarios[1]);
    //====================================================================//    
        //emp1.imprimeEmpresa();
        emp1.mostraEmpregados();

    }
}
3 respostas
solução!

Bom dia Pablo, nessa linha, quando adiciona o segundo funcionário, você acaba jogando o primeiro array fora e substituindo por esse:

emp1.funcionarios = new Funcionario[10];

Se retirar essa linha já irá imprimir os dois. Porém seu for() está percorrendo o array inteiro de 10 posições sendo que não tem 10 objetos Funcionario nele, dai ao tentar chamar algum método do terceiro funcionário que não existe vai dar um nullPointerException

Boa Guilherme!!

Olá Guilherme, bom dia! Bem, eu não estava mesmo conseguindo ver esse erro. Depois que fiz a observação o código rodou liso. Sobre a observação no for() eu não tive problemas na forma como se encontra, ele percorreu o Array tranquilamente e não apresentou o problema nullPointerException, acredito que por conta da condição if(funcionario == null) continue;

Obrigado, estava empacado rsrs