Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

NullPointerException em Arrays

class Funcionario {
    //--<Atributos>--
    int         id;          
    String         nome;        
     double         salario;      
    Data         dataAdmissao; 
    Data        dataDemissao;
    int            departamento; 
    int            setor;        
    int            secao;        
    String        rg;           
    String        cpf;          
    String      situacao;     


    //--< Metodos >--

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

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

    void demitirFuncionario(){
        this.situacao = "I";
        //this.dataDemissao = "28/12/2016";
    }

    void admitirFuncionario(){
        this.situacao = "A";
        //this.dataAdmissao = "28/12/2016";
    }

    String getDataFormatada(Data dataAdmissao ){

        return(dataAdmissao.dia +"/"+dataAdmissao.mes+"/"+dataAdmissao.ano);
    }
    void mostra(){

        System.out.println("ID: " + this.id);
        System.out.println("nome: " + this.nome);
        System.out.println("Salario: " + this.salario);
        //System.out.println("Data Admissao: " + this.dataAdmissao);
        System.out.println("Dia : " + this.dataAdmissao.dia);
        System.out.println("Mes : " + this.dataAdmissao.mes);
        System.out.println("Ano : " + this.dataAdmissao.ano);
        System.out.println("Data Demissao: " + this.dataDemissao);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Setor: " + this.setor);
        System.out.println("Secao: " + this.secao);
        System.out.println("RG: " + this.rg);
        System.out.println("CPF: " + this.cpf);
        System.out.println("Situacao: " + this.situacao);

    }
}
class Empresa{
    int id;
    String nome;
    String cnpj;
    Funcionario [] empregados;
    int livre;


    void adicionar(Funcionario f ){
        this.empregados[this.livre] = f;
        this.livre++;    
    }
}

class TestaEmpresa{


    public static void main(String [] Args){

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


        for (int i=1; i<=10; i++){
            Funcionario f1 = new Funcionario();
            f1.id = i;
            f1.salario = (i * 1000);

            empresa.adicionar(f1);
        }        

        for ( Funcionario x : empresa.empregados){

            System.out.println( "Empregado ID: " + x.id + " Salario: " + x.salario);
        }

        //for (Funcionario y : empresa.empregados ){
        //    y.mostra();
        //}

        for ( int i = 1    ; i<=10; i++){

            empresa.empregados[i].mostra();
        }

    }
}

Neste último For ocorre o nullPointerException, entendo que o erro ocorre por fazer referência a um índice de array , mas quando listo empresa.empregado no For anterior o atributo empregados da classe Empresa está carregado.

1 resposta
solução!

Olá, Vanderlei! Tudo certo, cara? =)

Quando você escreve:

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

Você está criando um array com 10 posições. Lembra qual o primeiro índice de um array? Ele começa no zero! E se ele a primeira posição é o zero, a última, nesse caso, é a posição de índice 9. Dessa forma, para acessar cada uma das suas posições, fazemos:

empregados[0];
empregados[1];
empregados[2];
...
empregados[9];

No caso do seu código, o primeiro e o último for estão acessando as posições 1 até 10. Mas somente o último está tentando acessar o método mostra() de empregados[10], ou seja, aí ele recebe um NullPointerException.

Para resolver esse problema, substitua ambos os for de:

for (int i = 1; i <= 10; i++) { ... }

Para:

for (int i = 0; i < 10; i++) { ... }

Observe as duas mudanças:

  1. int i = 1 para int i = 0.
  2. i <= 10 para i < 10.

Espero ter ajudado, mas se ainda estiver com dúvida ou surgir novas durante os estudos, não deixe de postar aqui no fórum para que possamos ajudá-lo! =)

Abraço e bons estudos,

Fábio