Galera,
Desculpa pelo tamanho do código, admito que se transformou em um código frankstein rsrsrs. Mas vou tentar ser objetivo na minha dúvida. Basicamente tenho 3 classes, Empresa, Funcionario e Data.
Ao tentar chamar o método preencherData, pelo código abaixo: empresa.dataEntrada.preencherData(10, 3, 2016);
Ocorre erro de java.lang.NullPointerException. Só funcionou depois que defini o empresa.dataEntrada como uma variavel e chamando o construtor Data();
empresa.dataEntrada = new Data();
A minha dúvida é justamente essa. Se o dataEntrada ja é uma variavel do tipo Data dentro da classe empresa, pq tive que chamar o construtor novamente ?
package Exercícios;
class Empresa{
private String nome;
int cnpj;
public Funcionario[] funcionarios;
private int livre = 0;
public Data dataEntrada;
public void statusArray(){
int simNull = 0;
int naoNull = 0;
for(int i = 0; i < this.funcionarios.length; i++){
if(this.funcionarios[i].getNome() == null){
simNull++;
}else{
naoNull++;
}
}
System.out.println("Funcionarios criados: " + naoNull);
System.out.println("Posições livres: " + simNull);
System.out.println("Total de Posições: " + this.funcionarios.length);
}
public void setArray(int x){
this.funcionarios = new Funcionario[x];
}
public void adiciona(Funcionario f) {
this.funcionarios[livre] = f;
livre++;
}
public boolean contem(Funcionario f){
for(int i = 0; i < this.livre; i++){
if( this.funcionarios[i] == f){
return true;
}
}
return false;
}
public void novoFuncionario(String nome, int salario){
this.funcionarios[livre].setDados(nome, salario);
livre++;
}
}
class Funcionario{
private String nome;
private String departamento;
double salario;
private int RG;
Data dataDeEntrada;
private int id;
private static int identificador = 1;
public double getSalario(){
return this.salario;
}
public void setDados(String n, int s){
this.nome = n;
this.salario = s;
this.id = identificador;
identificador++;
}
}
class Data{
int dia;
int mes;
int ano;
public void preencherData(int dia, int mes, int ano){
if(dia >= 29 && mes == 2){
this.dia = 29;
this.mes = 2;
this.ano = ano;
}else if(dia >= 31 && (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)){
this.dia = 31;
this.mes = mes;
this.ano = ano;
}else if(dia >= 30 && (mes == 4 || mes == 6 || mes == 9 || mes == 11)){
this.dia = 30;
this.mes = mes;
this.ano = ano;
}else{
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
}
String getFormatada() {
return this.dia + "/" + this.mes + "/" + this.ano;
}
}
class TestaEmpresa{
public static void main(String[] args){
empresa.dataEntrada = new Data();
empresa.dataEntrada.preencherData(10, 3, 2016);
System.out.println(empresa.dataEntrada.getFormatada());
}
}