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

Como passar o parâmetro da data para o vetor

Utilizando o prompt de comando as classes são compiladas, exceto a que contém o main, na qual aparece a mensagem: "Exception in thread "main" java.lang.NullPointerException at TestaFuncionarioEmp.main(TestaFuncionarioEmp.java:21)".

Não sei se é com relação ao parâmetro da data o erro, pois não consegui inserir valor para ela apresentar para o funcionário com vetor.

--< Classe TestaFuncionarioEmp.java

class TestaFuncionarioEmp{

    public static void main(String[] args) {


        Empresa f1 = new Empresa();

        f1.funcionarios = new FuncionarioEmpresa[3];
        f1.dataDeEntrada = new Data ();
        //Data dataDeEntrada = new Data();

        f1.funcionarios[0] = new FuncionarioEmpresa();

        f1.funcionarios[0].nome = "Golias Adalberto Alves";
        f1.funcionarios[0].dataDeEntrada.preencheData(05,10,2017);
        f1.funcionarios[0].departamento = "Testes";

        f1.funcionarios[0].rg = "26.104.65-X";
        f1.funcionarios[0].salario = 100.00;
        f1.funcionarios[0].recebeAumento(50);

        f1.imprimeEmpresa();

    }    

}

--< Classe FuncionarioEmpresa.java

class Empresa{

    String nome;
    String cnpj;

    FuncionarioEmpresa[] funcionarios;



    void imprimeEmpresa(){

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

                FuncionarioEmpresa funcionario = this.funcionarios[i];
                if(funcionario==null) continue;
                System.out.println("Nome do Funcionário................> " + funcionario.nome);
                System.out.println("Data da entrada do funcionário.> " + funcionario.dataDeEntrada.mostraData());

            }

    }


}

class FuncionarioEmpresa{

    String nome;
    String departamento;
    double salario;
    String rg;

    Data dataDeEntrada;

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

    double calculaGanhoAnual(){

        return this.salario * 12;
    }
}


class Data{


    int dia, mes, ano;

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


        this.dia = dia;
        this.mes = mes;
        this.ano = ano;

    }

    String mostraData(){
         return this.dia+"/"+this.mes+"/"+this.ano;
  }

}
4 respostas

Olá Sidney, primeiramente, para compilar, está faltando a inserção da propriedade dataDeEntrada na classe "Empresa", devido a referência: f1.dataDeEntrada = new Data ();

Para resolver o problema que ocorre em tempo de execução, veja que o erro remete a um NullPointerException , ou seja, algo que não foi inicializado apropriadamente e possui o valor null. Este erro é referente a seguinte linha de código:

 f1.funcionarios[0].dataDeEntrada.preencheData(05,10,2017);

Para resolver isto, basta inicializar a propriedade dataDeEntrada seja na classe de origem por meio de seu construtor, seja na classe em que você está se referenciando.

Olá,

Não consegui compilar aparece o mesmo erro. Inseri o código: 'Data dataDeEntrada = new Data();' na classe Empresa.

Quando você citou ".. basta inicializar a propriedade dataDeEntrada.. "

1- Inicializo com qual valor? "...seja na classe de origem ...." [Seria a classe da Data?] ou quando fala: 2- "seja na classe em que você está se referenciando" a classe que referencio é 'FuncionarioEmpresa'? Pois se encontra lá Data dataDeEntrada. 3- É preciso inicializar como? 3.1 Data dataDeEntrada? 3.2 Data dataDeEntrada = new Data() ?

solução!

Antes de inserir o valor você precisa instanciar a data do campo dataDeEntrada, desse jeito:

f1.funcionarios[0].dataDeEntrada = new Data();

Em seguida, aí sim pode realizar a operação de preencher a data:

       f1.funcionarios[0].dataDeEntrada.preencheData(05,10,2017);

Conseguiu visualizar o problema? Você estava tentando utlizar um método (preencheData) de um objeto(no caso, o parâmetro dataDeEntrada do tipo Data) que ainda não tinha sido inicializado, por isso o nullpointer.

Boa Hugo!