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

Dúvida no Ex. 6 da Aula 5 - Modificadores de acesso

O código abaixo retorna o erro: Exception in thread "main" java.lang.NullPointerException at Empresa.adiciona(TestaEmpresa.java:65) at TestaEmpresa.main(TestaEmpresa.java:125)

class Funcionario{
    private String nome;
    public String departamento;
    public Data dataEntrada;
    private double salario;

    public double getSalario() {
        return this.salario;
    }
    public void setSalario(double salario) {
        this.salario = salario;
    }

    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;
    }


    void mostra() {
    System.out.println("Departamento: " + this.departamento);
    System.out.println("Salário: " + this.salario);
    System.out.println("Data: " + this.dataEntrada);
    System.out.println("Ganho anual: " + this.calculoGanhoAnual());
            }

    void recebeAumento(double valorASerDepositado) {
        this.salario += valorASerDepositado;
    }
    double calculoGanhoAnual (){
        return this.salario * 12;
    }

    }    



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

    public int getCNPJ() {
        return this.cnpj;
    }
    public void setCNPJ(int cnpj) {
        this.cnpj = cnpj;
    }

    public Funcionario getFuncionario (int posicao) {
    return this.funcionarios[posicao];
    }

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

    //void mostraEmpregados() {
    //        for (int i = 0; i < this.livre; i++) {
    //            System.out.println("Funcionário na posição: " + i);
    //            System.out.println("R$" + this.funcionarios[i].salario);
    //        }
    //    }

    //void mostraTodasAsInformacoes() {
    //       for (int i = 0; i < this.livre; i++) {
    //         System.out.println("Funcionário na posição: " + i);
    //           System.out.println("Nome: " + this.funcionarios[i].nome);
    //         System.out.println("R$" + this.funcionarios[i].salario);
    //           System.out.println("Departamento: " + this.funcionarios[i].departamento);
    //           System.out.println("RG: " + this.funcionarios[i].rg);
    //       }
    //   }

       public boolean contem (Funcionario f){
        for (int i = 0; i < this.funcionarios.length; i++) {
           if (f ==this.funcionarios[i]){
                return true;
            }
        }
        return false;
     }

    }    


    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 String toString() {
       return this.dia + "/" + this.mes + "/" + this.ano;
    }
    }


        class TestaEmpresa {
        public static void main (String[] args) {
        Empresa InterpriseTayana = new Empresa ();
        Funcionario[] funcionarios = new Funcionario [10];

        for(int i = 0; i < 10; i++){
        Funcionario f1 = new Funcionario();
        f1.setNome("Luciano");
        f1.setSalario(3000);
        f1.setDepartamento("T.I");
        InterpriseTayana.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.setNome("Tayana");
        f2.setSalario(2000);
        f2.setDepartamento("R.H");
        InterpriseTayana.adiciona(f2);



        f2.mostra();
        //System.out.println(f1.getNome());
        //System.out.println(f1.getSalario());

        }

        }

    }
3 respostas

O erro está ocorrendo porque você está tentando inserir um elemento em um local que não existe no ARRAY.

Você fez um loop para rodar 10 vezes.

for(int i = 0; i < 10; i++){

Cada vez que o loop roda tenta adicionar 2 funcionários. Por isto ocorre o erro na linha:

this.funcionarios[this.livre] = f;

O sistema tenta inserir alguém em um local do array que não existe.

Mude a linha de

 Funcionario[] funcionarios = new Funcionario [10];

para

 Funcionario[] funcionarios = new Funcionario [20];

Isto é uma forma de resolver.

A outra forma seria reduzindo o FOR para:

for(int i = 0; i < 5; i++){

O mais importante é lembrar que no código original é possível inserir apenas 10 funcionários.

Gabriel, reduzi de dois funcionários para um, ou seja, ainda poderia continuar usando o código: Funcionario[] funcionarios = new Funcionario [10];

Mesmo assim continua dando o erro.

solução!

Você precisa modificar dentro de class Empresa.

A linha que está assim (criando as variáveis):

private Funcionario[] funcionarios;

Deve ficar assim (para criar os objetos e vincular cada um deles a uma posição no array.

private Funcionario[] funcionarios = new Funcionario[10];