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

java.lang.NullPointerException at funcionario.testaEmpresa.main(testaEmpresa.java:25)

insira seu código aqui
package funcionario;

public class testaEmpresa {

    public static void main(String[] args) {
        Empresa empresa = new Empresa();
        empresa.empregados = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.salario = 1000;
        f1.dataDeEntrada = new Data();
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.salario = 1000;
        f2.dataDeEntrada = new Data();
        empresa.adiciona(f2);

        Funcionario f3 = new Funcionario();
        f3.salario = 1000;
        f3.dataDeEntrada = new Data();
        empresa.adiciona(f3);

        empresa.empregados[0].mostra();
        empresa.empregados[1].mostra();
        empresa.empregados[3].mostra();


}
} 

package funcionario;

class Empresa {
    Funcionario[] empregados;
    String nome;
    String cnpj;
    int livre = 0;
    void adiciona (Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre = this.livre++;
        }


    }

Exception in thread "main" java.lang.NullPointerException at funcionario.testaEmpresa.main(testaEmpresa.java:25)

não consegui entender o porque do erro.

2 respostas
solução!

Olá, @liviacastilholi.

O problema está na seguinte linha do método adiciona de Empregados:

this.livre = this.livre++;

Ele deveria estar assim:

this.livre = ++this.livre;

Isso é uma questão de precedencia de operadores. No primeiro caso, a expressão está primeiro retornando o valor de this.livre e depois incrementando seu valor (o que é anulado pela auto-atribuição do valor antigo). Já no segundo caso, a primeira coisa que acontece é o incremento e só então a atribuição. Esse comportamento também existe em outras linguagens como Javascript e C/C++.

Seu código poderia ficar ainda mais simples:

this.livre++;

Ou seja, sem o operador de igual para atribuição. Ou então:

++this.livre;

Já que o operador ++ faz a atribuição a própria variável.

Att.

Consegui resolver, obrigada !