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

Dúvidas no Ex 4

Bom eu fiz o código, ele compila certinho mas na hora que eu vou executar, ele acaba mostrando esse erro.

java.lang.NullPointerException
    at Funcionario.mostra(Funcionario.java:22)
    at TestaEmpresa.main(TestaEmpresa.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)
class Funcionario{
  String nome;
  String departamento;
  double salario;
  Data dataEntrada;
  String rg;

  void recebeAumento(double aumento){

    this.salario += aumento;
  }

  double calculaGanhoAnual(){
    double ganhoAnual;
    ganhoAnual = salario*12;
    return ganhoAnual;
  }
  void mostra(){
    System.out.println("Nome :"+this.nome);
    System.out.println("Departamento :"+this.departamento);
    System.out.println("Salário :"+this.salario);
    System.out.println("Data de entrada :"+this.dataEntrada.getFormatada());
    System.out.println("RG :"+this.rg);
    System.out.println("Valor do salário com o aumento :"+this.salario);
    System.out.println("Ganho Anual :"+this.calculaGanhoAnual());
    System.out.println("-------------------------------------------------");

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

    Empresa mackenzie = new Empresa();
    mackenzie.funcionarios = new Funcionario[10];

    Funcionario f1 = new Funcionario();
    f1.salario = 500;
    mackenzie.adicionar(f1);

    Funcionario f2 = new Funcionario();
    f2.salario = 800;
    mackenzie.adicionar(f2);

    mackenzie.funcionarios[0].mostra();
    mackenzie.funcionarios[1].mostra();

    mackenzie.mostraEmpregados();
  }
}
2 respostas
solução!

Olá Vinicius,

A exceção NullPointerException que você está recebendo é causada quando tentamos chamar um método ou atributo dentro de uma variável que é esta null.

No seu caso em específico, em nenhum momento você inicializa os campos dataEntrada dos funcionários, você só setta, pelo que vi, os salários.

Logo, na linha 22 quando você tenta fazer

this.dataEntrada.getFormatada()

dataEntrada é null e chamar o método getFormatada() causa o erro.

Uma solução é inicializar as dataEntrada do mesmo jeito que você faz para funcionário e empresa. Algo como:

f1.dataEntrada = new Data(...);

Ficou claro?

Fernando muito obrigado, eu testei e realmente o problema era esse.