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

Dúvida no Ex. 6 da Aula 3 - Começando com Orientação a objetos

Estou conseguindo compilar o código, mas quando mando roubar o class aparece a seguinte mensagem de erro... "Exception in thread 'main' java.lang.NullPointerException at ExercicioAula3.main(ExercicioAula3.java:49)

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; }

}

class Funcionario {

String rg; String nome; String departamento; double salario; Data dataAdmissao;

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

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

void mostra() { System.out.println("Nome: " + this.nome); System.out.println("Departamento: " + this.departamento); System.out.println("Salario: R$" + this.salario); System.out.println("Data de entrada: " + this.dataAdmissao); System.out.println("RG: " + this.rg); System.out.println(""); }

}

class ExercicioAula3_1 { public static void main(String[] args) { Funcionario fun1 = new Funcionario(); fun1.rg = "83692345612"; fun1.nome = "Alexandre Augusto"; fun1.departamento = "Administracao"; fun1.salario = 2590.0; fun1.dataAdmissao.preencherData(3, 3, 1998);

fun1.calculaGanhoAnual(); fun1.recebeAumento(200.0);

fun1.mostra();

Funcionario fun2 = new Funcionario(); fun2.rg = "09809809855"; fun2.nome = "Joana Oliveira"; fun2.departamento = "Vendas"; fun2.salario = 3200.0; fun2.dataAdmissao.preencherData(12, 12, 2009);

fun2.mostra();

} }

6 respostas

Boa noite André,

Utilize a formatação para código que fica mais fácil das pessoas te ajudar :)

Não sei exatamente qual é a linha 49 que está dando erro, porém, uma possibilidade clara de NullPointer é aqui:

fun1.dataAdmissao.preencherData(3, 3, 1998) e aqui fun2.dataAdmissao.preencherData(12, 12, 2009)

Isto ocorre porque a data de admissão não foi instanciada. Para fazer isso é bem simples : Data dataAdmissao = new Data();

Uma dica, para facilitar o desenvolvimento, rode seu código em modo debug, com isso você pode por um breakpoint na linha 49 e analisar o que está acontecendo.. blz?

Abraços!

solução!

O Renato está correto André. O problema é que quando você deu um new Funcionario, você instanciou o objeto funcionario e até está tudo certo. Mas você esqueceu que dentro da classe Funcionario existe uma variável dataAdmissao que é do tipo Data, e Data é uma classe. Com isso, quando você começou a atribuir os valores a Funcionario, você chamou o método preencherData, que está definindo a data na referencia dataAdmissao que é do tipo Data, só que ele não irá fazer isso, pois você não criou o objeto Data para chamar o método dentro desta classe e foi por isso que o JVM disse NullPointerException, ou seja, não existe um objeto Data para você chamar o método preencherData. Desta forma, dê um new Data e defina uma referencia e após isso, determine que dataAdmissao receba esse referencia. Ex:

//Objeto Funcionario

Data tempo = new Data();

fun1.dataAdmissao = tempo;
fun1.dataAdmissao.preencerData(1, 1, 1991);
//outros métodos...

Obrigado... 8)

Feche a dúvida por favor André. :)

Renato, bom dia. Por favor selecione uma resposta como solução para fechar o tópico, grato.

Felipe, não foi em quem abriu o tópico; André, fecha pra gente por gentileza.