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

Estou com dúvida no curso de Primeiros passos com Java, no exercício 4 do capítulo Arrays.


public class TestaEmpresa {

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

        //Funcionario n°1
        Funcionario cei022 = new Funcionario();
        cei022.nome = "Daniel Roberto";
        cei022.departamento = "TI";
        cei022.salario = 2500;
        cei022.dataEntrada = new Data();
        cei022.dataEntrada.preencheData(16, 02, 1989);
        cei022.rg = "123456789";
        newFuncionario.adicionaFuncionario(cei022);

        //Funcionario n°2
        Funcionario cei023 = new Funcionario();
        cei023.nome = "Danilo Mathus";
        cei023.departamento = "TI";
        cei023.salario = 4500;
        cei023.dataEntrada = new Data();
        cei023.dataEntrada.preencheData(24, 03, 1994);
        cei023.rg = "123456789";
        newFuncionario.adicionaFuncionario(cei023);

        //Funcionario n°3
        Funcionario cei024 = new Funcionario();
        cei024.nome = "Juliano Ferrari";
        cei024.departamento = "TI";
        cei024.salario = 7500;
        cei024.dataEntrada = new Data();
        cei024.dataEntrada.preencheData(10, 02, 1989);
        cei024.rg = "123456789";
        newFuncionario.adicionaFuncionario(cei024);

        newFuncionario.mostraEmpregados();
    }
}
public class Empresa {
    String cnpj;
    Funcionario[] funcionarios;
    int lastEmptyIndex = 0;

    boolean adicionaFuncionario(Funcionario f){
        if(funcionarios != null && lastEmptyIndex != funcionarios.length -1){
            this.funcionarios[lastEmptyIndex++] = f;
            return true;
        }

        return false;
    }   

    public void mostraEmpregados(){
        for (int i = 0; funcionarios[i].nome != null; i++){
            System.out.println("ID" + i);
            System.out.println("Nome:" + funcionarios[i].nome);
            System.out.println("Departamento:" + funcionarios[i].departamento);
            System.out.println("Salario:" + funcionarios[i].salario);
            funcionarios[i].dataEntrada.getFormatada();
            System.out.println("RG:" + funcionarios[i].rg);
            System.out.println("\n\n");

        }
    }
}

Bom copilar ele copila, mostra todos os funcionário cadastrados... mas no console da um erro... Alguém poderia me informa o que esta errado ?

Exception in thread "main" java.lang.NullPointerException
    at Empresa.mostraEmpregados(Empresa.java:16)
    at TestaEmpresa.main(TestaEmpresa.java:38)
5 respostas
solução!

Como você criou apenas 3 funcionarios para um array de 10 posições, as demais posições estão nulas. por isso quando você faz o teste do for

 for (int i = 0; funcionarios[i].nome != null; i++)

da posição i = 3 em diante não existe um objeto do tipo Funcionario onde possa ser acessado o atributo nome.

Por isso você deve alterar a condição do seu laço. para algo como:

for(int i = 0; i < funcionarios.length; i++){
   Funcionario f = funcionarios[i];
   if(f == null){
     continue;
   }else{
       System.out.println("ID" + i);
       System.out.println("Nome:" + funcionarios[i].nome);
       System.out.println("Departamento:" + funcionarios[i].departamento);
       System.out.println("Salario:" + funcionarios[i].salario);
       System.out.println("Data formatada: " + funcionarios[i].dataEntrada.getFormatada();
       System.out.println("RG:" + funcionarios[i].rg);
       System.out.println("\n\n");
    }
}

Ratifico a reposta do osmar.

nossa verdade, um erro muito bobo da minha parte!! muito obrigado pela ajuda! tenha um bom dia;

Selecione qual resposta foi a solução, assim outros que podem ter a mesma dúvida sabem como resolver.

Pronto, muito obrigado a todos.