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

Dúvida na criação do Funcionário

Galera

Boa tarde,

Alguém poderia me tirar uma dúvida. Estou tentando criar um empregado na classe , mas esta retornando erro. Abaixo o código:

package Exercícios;

class Empresa{
    String nome;
    int cnpj;
    Funcionario[] empregados;
    int livre = 0;

    void imprimeFuncionarios(){
          for(int i = 0; i < 10; i++){
            Funcionario funcionario = this.empregados[i];
            if(funcionario == null) continue;
            System.out.println(this.empregados[i].nome);
        }
    }

    void mostraEmpregados(){
            for(int b = 0; b < this.empregados.length; b++){
            System.out.println(this.empregados[b].nome);
            }
        }

    void adiciona(Funcionario f) {
           this.empregados[livre] = f;
           livre++;
       }

    void mostraPosicaoLivre(){
            for(int c = 0; c < this.livre; c ++){
            System.out.println(this.livre);

            }
    }

}

class Data{
    int dia;
    int mes;
    int ano;

        public void preencherData(int dia, int mes, int ano){
            this.dia = dia;
            this.mes = mes;
            this.ano = ano;
        }   

        //@Override
        //public String toString(){
        //   return dia + "/" + mes + "/" + ano;

        String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;

        }
}

class Funcionario{
    String nome;
    String departamento;
    int salario;
    int RG;    
    Data dataDeEntrada;

    void recebeAumento(double valor){
        //double novoSalario= this.salario + valor;
        //this.salario = novoSalario;
        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: " + this.salario);
        System.out.println("Data de Entrada: " + this.dataDeEntrada.getFormatada());
        System.out.println("RG: " + this.RG);
        System.out.println("Ganho Anual: " + this.calculaGanhoAnual());
     }
}


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

        Empresa empresa = new Empresa();
        empresa.empregados = new Funcionario[10];  

        empresa.empregados[0].nome = "Vitor";

    }
}

Basicamente, estou criando o empregado Vitor, através do método:

empresa.empregados[0].nome = "Vitor";

// Eu raciocinei da seguinte forma, a empresa possui um empregado na posição 0 do vetor empregados (Funcionarios), de nome Vitor.

Mas ocorre o erro abaixo:

Exception in thread "main" java.lang.NullPointerException at Exercícios.TestaEmpresa.main(Exercicio_v2.java:92) C:\Users\vsampaio\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

Alguém poderia me dizer o que esta errado, e me passar uma forma clara de entendimento, estou tendo um pouco de dificuldades na ótica de orientação a objetos.

Obrigado desde já.

Att Vitor

2 respostas
solução!

Olá, Vitor!

Neste trecho

Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10];

você criou uma array de Funcionários de 10 posições. Porém, o Java define cada uma destas posições com o valor null. Você teria que definir um objeto para cada posição, antes de inserir seus valores, desta forma:

Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10]; 
empresa.empregados[0] = new Funcionario();
empresa.empregados[0].nome = "Vitor";

Allan Obrigado!