Questão 9 apostila Caelum (opcional-avançado)

6 respostas
java
Cesar_Ryan

Olá pessoal, estou começando a aprender Java e gostaria de uma ajuda em um exercício do Caellum:

(opcional-avançado) Crie um método na classe Data que devolva o valor formatado da data, isto é, devolva uma String com “dia/mes/ano”. Isso para que o método mostra da classe Funcionario possa ficar assim:

class Funcionario {
// atributos e metodos

void mostra() {

// imprime outros atributos…

System.out.println("Data de entrada: " + this.dataDeEntrada.formatada());

}

}

no meu código esta assim:

classe funcionário:

public class Funcionario {

String nome;
String departamento;
//String dataDeEntradanoBanco;
int rg;
double salario;
Data dataDeEntradaNoBanco;

void mostra(){

System.out.println("Nome: " + this.nome);

System.out.println("RG: " + this.rg);

System.out.println("Salário: R$ " + this.salario);

System.out.println("Departamento: " + this.departamento);

<a href="//System.out.println">//System.out.println</a>("Data de Entrada no Banco: " + dataDeEntradaNoBanco.dia + “/” + dataDeEntradaNoBanco.mes + “/” + dataDeEntradaNoBanco.ano);

System.out.println(“Data de entrada” + this.dataDeEntradaNoBanco.dataFormatada());

System.out.println("Ganho anual: R$ " + this.calculaGanhoAnual());

}

Classe data:

public class Data {

int dia;
int mes;
int ano;

public String dataFormatada(/*int dia, int mes, int ano*/) {
	return (this.dia + "/" + this.mes + "/" + this.ano);
}

}

porém, ao ir no método main, que fica na classe TestaFuncionario:

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

Funcionario f = new Funcionario();
	Data data = new Data();
	
	data.dia = 22;
	data.mes = 8;
	data.ano = 2015;
	
	f.nome = "César Ryan";
	f.departamento = "Gerencia de TI";
	f.rg = 123456789;
	f.salario = 4000;
	
	f.mostra();

ele acusa um erro:

Nome: César Ryan

RG: 123456789

Salário: R$ 4000.0

Departamento: Gerencia de TI

Exception in thread main java.lang.NullPointerException

at capitulo4.Funcionario.mostra(Funcionario.java:45)

at capitulo4.TestaFuncionario.main(TestaFuncionario.java:24)

alguém poderia me ajudar por favor?

6 Respostas

edumatias

Falta setar data.

f.nome = "César Ryan";
 f.departamento = "Gerencia de TI";
 f.rg = 123456789;
 f.salario = 4000;
 f.dataDeEntradaNoBanco = data;

Amigo, edite seu post e coloque entre tags seu código fonte. Está péssimo para ler e enteder.

Veja se resolve da forma que passei acima.

Abraço

B
data.dia = 22;
	data.mes = 8;
	data.ano = 2015;

data.dataFormatada(dia, mes, ano)
D

Acho que falto no main:

f.dataDeEntradaNoBanco = data;

O dataDeEntradaNoBanco é nulo, não é possível chamar métodos ou atributos de valores nulos ou não instanciados.

edumatias

Exatamente o que postei acima.

Cesar_Ryan

@edumatias obrigado, funcionou, não sei o que seria colocar entre TAGS o código que você chama.
mas não entendi, por que que teria que colocar essa linha:

“f.dataDeEntradaNoBanco = data;”

e por exemplo, se eu tiver varias datas de funcionários diferentes, sempre vou ter que fazer isso ou teria algo que eu pudesse fazer dentro da classe funcionário ou Data que pudesse facilitar? tipo que não precisasse escrever esta linha

edumatias

Na verdade você está dizendo que, o Funcionário tem uma data de entrada, a qual deverá ser setada.

Aqui você instancia a data (cria uma data de entrada)

Data data = new Data();

data.dia = 22;
        data.mes = 8;
        data.ano = 2015;

Só que após criar essa Data você não vai deixar ela “boiando”, você tem que atribuir a algo, ou alguém, que neste caso é um Funcionário.

E aqui você seta (passa para o Funcionário) a data que foi criada, pra dizer que ele entrou neste dia.

f.dataDeEntradaNoBanco = data;

Lembre-se de usar os métodos de acesso e modificação

Funcionario f = new Funcionario();

f.setNome("César Ryan");
f.setDepartamento("Gerencia de TI");
f.setRg(123456789);
f.setSalario(4000);
f.setDataDeEntradaNoBanco(data);

Obs: Colocar o código entre tags, você seleciona na sua postagem seu código fonte e pressionada Ctrl + Shift + C que ele formatará seu código.

Criado 26 de outubro de 2017
Ultima resposta 26 de out. de 2017
Respostas 6
Participantes 4