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

Dúvida no Ex. 3 da Aula 4 - Arrays

Não importa o que eu faça sempre dá o mesmo erro: Exception in thread "main" java.lang.NullPointerException at src.TestaFuncionario.main(TestaFuncionario.java:57)

A linha 57 é a linha em que eu coloco a data de nascimento do funcionário, sei que o erro está por aqui, já que quando tiro a linha no método mostra referente a data de nascimento o programa roda normalmente.

class Funcionario {
    String departamento;
    double salario;
    String dataEntradaBanco;
    String rg;
    Data dataDeNascimento;
    void rebeceAumento (double aumento){
        this.salario += aumento;
    }
    double calculaGanhoAnual (){
        return salario * 12;
    }

    void mostra(){
        System.out.println("Departamento " + this.departamento);
        System.out.println("Salario " + this.salario);
        System.out.println("Data de Entrada no Banco " + this.dataEntradaBanco);
        System.out.println("RG " + this.rg);
        System.out.print("Data de nascimento " + this.dataDeNascimento.getFormatada());
    }

}
class Data {
    int dia;
    int mes;
    int ano;

    void preencherDataNascimento(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}
class Empresa {
    String nome;
    String cnpj;
    Funcionario[] empregados;
    int contador = 0;
    void adiciona(Funcionario f){
        this.empregados[this.contador] = f;
        this.contador++;
    }
}
class testeEmpresa {
    public static void main (String[] args) {
    Data dataDeNascimento = new Data();

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

    ficcao.empregados[0] = new Funcionario();
    Funcionario daniel = new Funcionario();
    daniel.salario = 1100.0;
    daniel.dataDeNascimento.preencherDataNascimento(10,02,1993);

    ficcao.adiciona(daniel);

    ficcao.empregados[0].mostra();

    }
}
1 resposta
solução!

Mil perdões! Passei despercebido por um tópico onde outro membro, Allister Terhorst Ramos, já havia respondido a mesma questão (link aqui!). Apenas para deixar como informação aqui o que estava errado era que o atributo dataDeNascimento estava sendo criado em memória no local certo, ao invés de fazer isso na class Funcionário eu estava iniciando-a dentro do main. Meu código completo, e funcionando, está aqui:

class Funcionario {
    String departamento;
    double salario;
    Data dataEntradaBanco = new Data();
    String rg;
    Data dataDeNascimento = new Data();

    void rebeceAumento (double aumento){
        this.salario += aumento;
    }
    double calculaGanhoAnual (){
        return salario * 12;
    }

    void mostra(){
        System.out.println("Departamento " + this.departamento);
        System.out.println("Salario " + this.salario);
        System.out.println("Data de Entrada no Banco " + this.dataEntradaBanco.getFormatada());
        System.out.println("RG " + this.rg);
        System.out.print("Data de nascimento " + this.dataDeNascimento.getFormatada());
    }

}
class Data {
    int dia;
    int mes;
    int ano;

    void preencherData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}
class Empresa {
    String nome;
    String cnpj;
    Funcionario[] empregados;
    int contador = 0;
    void adiciona(Funcionario f){
        this.empregados[this.contador] = f;
        this.contador++;
    }

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

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

    ficcao.empregados[0] = new Funcionario();
    Funcionario daniel = new Funcionario();
    daniel.departamento = "TI";
    daniel.salario = 1100.0;
    daniel.dataEntradaBanco.preencherData(8, 9, 2012);
    daniel.rg = "1111-1111";
    daniel.dataDeNascimento.preencherData(10,02,1993);

    ficcao.adiciona(daniel);

    ficcao.empregados[0].mostra();

    }
}