Olá galera sou novíssimo em java estou gostando bastante da forma de programar, mas me deparei com um probleminha que estou seguindo um exemplo da apostila da Caelum, muito bom por sinal, vejam ai o código e me digam se podem me ajudar, abaixo:
Funcionario.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package primeiraaplicacao;
/**
* objeto funcionario
* @author Marcos
*/
class Data{
int dia;
int mes;
int ano;
}
class Departamento{
int codigo;
String descricao;
}
public class Funcionario {
String nome;
int matricula;
double salario;
String admissao;
String rg;
String cpf;
boolean ativo;
Data datadeentrada;
Departamento departamento;
//aumento de salario
void aumentodesalario(double valor){
double novosalario = this.salario + valor;
this.salario = novosalario;
}
//demite um funcionario
void demitefuncionario(){
boolean demite = false;
this.ativo = demite;
}
void mostra(){
System.out.println("Funcionário : "+this.nome);
System.out.println("C.P.F : "+this.cpf);
System.out.println("Matricula : "+this.matricula);
System.out.println("Cod.Depto : "+this.departamento.codigo);
System.out.println("Departamento : "+this.departamento.descricao);
System.out.println("Salário : "+this.salario);
System.out.println("Dia: " + this.datadeentrada.dia);
System.out.println("Mês: " + this.datadeentrada.mes);
System.out.println("Ano: " + this.datadeentrada.ano);
}
}
Testafuncionario.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package primeiraaplicacao;
/**
*
* @author Marcos
*/
public class Testefuncionario {
public static void main(String args[]){
Funcionario funcmostra = new Funcionario();
Funcionario funcionario = new Funcionario();
Departamento dpto = new Departamento();
funcionario.departamento = dpto;
funcmostra.nome = "Marcos Duarte de Oliveira";
funcmostra.matricula = 3651;
funcmostra.salario = 2110.00;
funcmostra.admissao = "02/05/1992";
funcmostra.rg = "925 688";
funcmostra.cpf = "442.915.901-72";
funcmostra.ativo = true;
funcionario.departamento.codigo = 1;
funcionario.departamento.descricao = "Coordenadoria de Habitacao";
//mostra display dados dos funcionarios
funcmostra.mostra();
// aumento de salario do funcionario
funcionario.aumentodesalario(300.00);
System.out.println("Salário Atual: "+funcionario.salario);
//demitindo funcionario
funcionario.demitefuncionario();
if (funcionario.ativo){
System.out.println("Funcionario Ativo");
}else{
System.out.println("Funcionario Demitido");
}
Funcionario f1 = new Funcionario();
Data data = new Data();
f1.datadeentrada = data;
f1.nome = "Fiodor";
f1.salario = 100;
f1.datadeentrada.dia = 2;
f1.datadeentrada.mes = 5;
f1.datadeentrada.ano = 1992;
Funcionario f2 = f1;
f2.nome = "Fiodor";
f2.salario = 100;
if(f1 == f2) {
System.out.println("iguais");
} else {
System.out.println("diferentes");
}
}
}
o erro “Exception in thread “main” java.lang.NullPointerException
at primeiraaplicacao.Funcionario.mostra(Funcionario.java:48)
at primeiraaplicacao.Testefuncionario.main(Testefuncionario.java:33)
Java Result: 1”
acontece na seguinte linha do funcionario.java
System.out.println("Cod.Depto : "+this.departamento.codigo);
pessoal como posso resolver, obrigado aqueles que tentarem me ajudar.
tente no lugar de fazer assim:
...
funcionario.departamento.codigo = 1;
funcionario.departamento.descricao = "Coordenadoria de Habitacao";
...
fazer isso:
Departamento dpto = new Departamento();
depto.codigo = 1;
depto.descricao = "Coordenadoria de Habitacao";
...
funcionario.departamento = dpto;
boa tarde fera…
Só olhe com atenção esse trecho:
...
# funcmostra.ativo = true;
# funcionario.departamento.codigo = 1;
# funcionario.departamento.descricao = "Coordenadoria de Habitacao";
ao invés de funcionario.departamento.codigo, nao seria funcmostra.departamento.codigo ?
t+
Boa tarde só uma dica, voce deve estar usando o netBeans certo?
Recomendo q já que esta começando usar o BlueJ, é uma ferramenta bem mais simples e organizada, e não completa o código para você!

Outra coisa acho que é uma boa pratica sempre definir atributos e classes como “public, private …”
bom galera ainda não consegui resolver o meu problema com as dicas,
mas ainda estou esperançoso que vou conseguir, se alguém ainda puder
me ajudar eu agradeço, vlw.
cara, tu criou uma classe funcionario publica dentro de um punhado de classe default
recorta a public class Funcionario e cria uma classe so pra ele
e testa com as modificações dos colegas.
Cara vc instanciou dois funcionario, “funcmostra” e “funcionario” setou varios atributos em “funcmostra” e setou o departamento no “funcionario”.
Depois voce invoca o metodo mostra() com o objeto “funcmostra” e como vc não setou o departamento neste objeto da o nullpointerexcepiton.
Tente fazer o que a DianaPJ falou!!
Cara o que vi é que a data esta null, tente usar o BlueJ vai ser melhor para aprender use sempre a visibilidade dos atributos e dos metodos ( public, private, protected), para atributos o mais usado é provate, com métodos get’s e set’s para modificar o valor…
Galera blz, vlw as dicas, consegui resolver e o melhor entender, bacana mesmo vai ai o código e se tiver mais alguma consideração dos colegas podem ficar a vontade.
Funcionario.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package primeiraaplicacao;
/**
* objeto funcionario
* @author Marcos
*/
class Data{
int dia;
int mes;
int ano;
}
class Departamento{
int codigodep;
String descricao;
}
public class Funcionario {
String nome;
int matricula;
double salario;
String admissao;
String rg;
String cpf;
boolean ativo;
Data datadeentrada;
Departamento departamento;
//aumento de salario
public void aumentodesalario(double valor){
double novosalario = this.salario + valor;
this.salario = novosalario;
}
//demite um funcionario
public void demitefuncionario(){
boolean demite = false;
this.ativo = demite;
}
public void mostra(){
System.out.println("Funcionário : "+this.nome);
System.out.println("C.P.F : "+this.cpf);
System.out.println("Matricula : "+this.matricula);
System.out.println("Cod.Depto : "+this.departamento.codigodep);
System.out.println("Departamento : "+this.departamento.descricao);
System.out.println("Salário : "+this.salario);
System.out.println("Dia : " + this.datadeentrada.dia);
System.out.println("Mês : " + this.datadeentrada.mes);
System.out.println("Ano : " + this.datadeentrada.ano);
}
}
Testefuncionario.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package primeiraaplicacao;
/**
*
* @author Marcos
*/
public class Testefuncionario {
public static void main(String args[]) {
// Instanciando o Objeto funcionario
Funcionario funcionario = new Funcionario();
// Instanciando o Objeto Departamento
Departamento dpto = new Departamento();
funcionario.departamento = dpto;
// Instanciando o Objeto Data
Data datent = new Data();
funcionario.datadeentrada = datent;
funcionario.nome = "Marcos Duarte de Oliveira";
funcionario.matricula = 3651;
funcionario.salario = 2110.00;
funcionario.admissao = "02/05/1992";
funcionario.rg = "925 688";
funcionario.cpf = "442.915.901-72";
funcionario.ativo = true;
funcionario.departamento.codigodep = 1;
funcionario.departamento.descricao = "Coordenadoria de Habitacao";
funcionario.datadeentrada.dia = 2;
funcionario.datadeentrada.mes = 5;
funcionario.datadeentrada.ano = 1992;
//mostra display dados dos funcionarios
funcionario.mostra();
// aumento de salario do funcionario
funcionario.aumentodesalario(300.00);
System.out.println("Salário Atual: " + funcionario.salario);
//demitindo funcionario
funcionario.demitefuncionario();
if (funcionario.ativo) {
System.out.println("Funcionario Ativo");
} else {
System.out.println("Funcionario Demitido");
}
Funcionario f1 = new Funcionario();
Data data = new Data();
f1.datadeentrada = data;
f1.nome = "Fiodor";
f1.salario = 100;
f1.datadeentrada.dia = 2;
f1.datadeentrada.mes = 5;
f1.datadeentrada.ano = 1992;
Funcionario f2 = f1;
f2.nome = "Fiodor";
f2.salario = 100;
if (f1 == f2) {
System.out.println("iguais");
} else {
System.out.println("diferentes");
}
}
}
muitíssimo obrigado galera, espero poder contar sempre com vcs…