Quando eu tento rodar a classe TestaEmpresa aparece esse erro:
Exeption in thread "main" java.lang.NullPointerException
at Funcionario.mostra(Funcionario.java:81)
at Empresa.mostraTodasAsInformacoes(Funcionario.java:185)
at TestaEmpresa.main(Funcionario.java:220)
Código:
class Funcionario{
private String nome;
private String departamento;
private double salario;
private Data dataEntrada;
private String rg;
private static int proximoFuncionario = 0;
private int identificador;
public Funcionario() {}
public Funcionario(String nome, Data dataEntrada){
this.nome = nome;
this.dataEntrada = dataEntrada;
}
public Funcionario(String nome){
this.nome = nome;
this.identificador = proximoFuncionario++;
}
public int getIdendificador(){
return this.identificador;
}
public void recebeAumento(double valorDoAumento){
this.salario += valorDoAumento;
}
public double getGanhoAnual(){
return this.salario * 12;
}
public String getNome(){
return this.nome;
}
public void setNome(String nome){
this.nome = nome;
}
public String getDepartamento(){
return this.departamento;
}
public void setDepartamento(String departamento){
this.departamento = departamento;
}
public double getSalario(){
return this.salario;
}
public void setSalario(double salario){
this.salario = salario;
}
public Data getDataEntrada(){
return this.dataEntrada;
}
public void setDataEntrada(Data dataEntrada){
this.dataEntrada = dataEntrada;
}
public String getRg(){
return this.rg;
}
public void setRg(String rg){
this.rg = rg;
}
public void mostra(){
System.out.println("Nome do funcionario: "+ this.nome);
System.out.println("Departamento: "+ this.departamento);
System.out.println("Salario atual: " + this.salario);
System.out.println("Data de entrada: "+ this.dataEntrada.getFormatada());
System.out.println("RG: "+this.rg);
System.out.println("Ganho anual: "+ this.getGanhoAnual());
System.out.println("");
}
}
//////////////////////////////////////////////////////////
class Data{
int dia;
int mes;
int ano;
void preencheData(int dia, int mes, int ano){
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
public Data() {}
public Data(int dia, int mes, int ano){
this.dia = dia;
this.mes = mes;
this.ano = ano;
if(!isDataViavel(dia, mes, ano)){
System.out.println("A data "+ getFormatada() +" não existe!");
}
}
private boolean isDataViavel(int dia, int mes, int ano){
if(dia <= 0 || mes <= 0){
return false;
}
int ultimoDiaDoMes = 31;
if(mes == 4 || mes == 6 || mes == 9 || mes == 11){
ultimoDiaDoMes = 30;
}else if(mes == 2){
ultimoDiaDoMes = 28;
if((ano % 400 == 0) || ((ano % 4 == 0) && (ano % 100 != 0))){
ultimoDiaDoMes = 29;
}
}
if(dia > ultimoDiaDoMes){
return false;
}
return true;
}
String getFormatada(){
return this.dia+"/"+this.mes+"/"+this.ano;
}
}
//////////////////////////////////////////////////////////////
class Empresa {
private String nomeEmpresa;
private String cnpj;
private Funcionario[] empregados;
int livre = 0;
public void setNomeEmpresa(String nomeEmpresa){
this.nomeEmpresa = nomeEmpresa;
}
public String getNomeEmpresa(){
return this.nomeEmpresa;
}
public String getCnpj(){
return this.cnpj;
}
public Empresa(String cnpj, int tamanho){
this.cnpj = cnpj;
this.empregados = new Funcionario[tamanho];
}
public Funcionario getFuncionario (int posicao){
return this.empregados[posicao];
}
public void adiciona(Funcionario f){
this.empregados[this.livre] = f;
this.livre++;
}
public void mostraEmpregados(){
for(int i = 0; i < this.livre; i++){
System.out.println("Funcionario na posição: "+i);
System.out.println("R$" + this.empregados[i].getSalario());
}
}
public void mostraTodasAsInformacoes(){
for(int i = 0; i < this.livre; i++){
this.empregados[i].mostra();
}
}
public boolean contem(Funcionario f){
for(int i = 0; i < this.livre; i++){
if(this.empregados[i] == f){
return true;
}
}
return false;
}
}
//////////////////////////////////////////////////////////////////////////////
class TestaEmpresa{
public static void main(String[] args){
Empresa empresa = new Empresa("123456789", 10);
empresa.setNomeEmpresa("IBM");
Funcionario f1 = new Funcionario();
f1.setNome("Joao");
f1.setDepartamento("TI");
f1.setSalario(800.0);
Data data1 = new Data(25,03,2016);
f1.setRg("123456789");
empresa.adiciona(f1);
empresa.mostraTodasAsInformacoes();
}
}