Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Compila, mas não roda

O programa compila, mas não roda. Da o seguinte erro: Exception in thread "main" java.lang.NullPointerException at ProgramFuncionario.java. Como resolvo isso?

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

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


class Funcionario{
    String nome;
    String cargo;
    double salario;
    String rg;
    Data entrada;

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

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

    void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("RG: " + this.rg);
        System.out.println("Cargo: " + this.cargo);
        System.out.println("Data de entrada na empresa: " + this.entrada.mostrarData());
        System.out.println("Salário Mensal: " + this.salario);
        System.out.println("Salário Anual: " + this.calculaGanhoAnual());

    }

}


class ProgramaFuncionario{
    public static void main(String[] args){
        Funcionario func01 = new Funcionario();
        Data diaEntrada = new Data();

        func01.nome = "Raphaelli Bellini";
        func01.cargo = "Desenvolvedor";
        func01.salario = 5000;
        func01.entrada.dia = 19;
        func01.entrada.mes = 8;
        func01.entrada.ano = 14;
        func01.rg = "31872456";
        func01.recebeAumento (1000);
        func01.mostra();
    }
}
3 respostas
solução

Boa tarde, Raphaelli! Tudo bem com você? =)

O problema encontra-se dentro do método main()... =|

Quando você faz func01.entrada.dia = 19 e nas duas linhas seguintes, você está tentando acessar o atributo dia de entrada. Entretanto, em momento algum você inicializou Data do objeto Funcionario! Logo no começo do método, você instanciou Funcionarioe Data, mas eles não estão "ligados". Você deveria fazer algo como:

Funcionario funcionario = new Funcionario();
Data diaEntrada = new Data();

funcionario.entrada = diaEntrada;

Ou então:

Funcionario funcionario = new Funcionario();
funcionario.entrada = new Data();

Depois de fazer isso, o restante deve continuar funcionando:

Funcionario funcionario = new Funcionario();
Data diaEntrada = new Data();

funcionario.entrada = diaEntrada;

funcionario.nome = "Raphaelli Bellini";
funcionario.cargo = "Desenvolvedor";
funcionario.salario = 5000;
funcionario.entrada.dia = 19;
funcionario.entrada.mes = 8;
funcionario.entrada.ano = 14;
funcionario.rg = "31872456";
funcionario.recebeAumento (1000);
funcionario.mostra();

Conseguiu entender o problema? =)

Espero ter ajudado, mas qualquer dúvida não deixe de postar por aqui no fórum para que possamos te ajudar!

Abraço e bons estudos,

Fábio

Só um adendo. Porque ao colocar mês 08 ao invés de apenas 8 da erro com é mensagem de que é um numero muito grande para inteiro? Obrigado!

Raphaelli,

Ao colocar o "0" na frente de um número, o Java interpretará aquele número na base octal, ou seja, base 8. O problema é que os números em base octal vão de 0 a 7. Dessa forma, ao colocar o 08, você está colocando um número inválido. =)

Abraço e bons estudos,

Fábio