3
respostas

Exercício 5, Aula 5 - Exception in thread

Boa noite, possuo dois erros "exception in thread main java.lang.nullpointerexception" ao acessar um método de outra classe.

Os erros se encontram respectivamente nas linhas: 40 e 56.

class Funcionario{
    private String nome;
    String RG; 
    Data dataNascimento;
    String dataBanco;
    Endereco endereco;
    Departamento departamento;
    private double salario;

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

    public String getNome(){
        return this.nome;
    }

    public void setSalario(double valor){
        this.salario += valor;
    }

    public void setNome(String nome){
        this.nome = nome;
    }

    public void setDataNascimento(Data data){
        this.dataNascimento = data;
    }

}

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

    void getEmpregados(){
        for(int i = 0; i < this.empregados.length; i++){
            System.out.println(this.empregados[i].getNome() + ", salario : R$" + this.empregados[i].getSalario());
        }            
    }

}

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

        for(int i = 0; i < empresa.empregados.length; i++){
            Funcionario f = new Funcionario();
            f.setNome("Francisco");
            f.setSalario(i * 100);
        }
        empresa.getEmpregados();    

    }    
}

Desde já, obrigado.

3 respostas

Bom dia Luiz,

O nullpointer acontece porque na hora de dar um System.out.println do método getEmpregados(), ele chama o getNome do empregado[i], mas não existe empregado naquela posição, ele está null.

Veja que você chega a criar o array de funcionários:

empresa.empregados = new Funcionario[9];

Mas dentro do for, onde os funcionários são criados, você não está incluindo eles na lista:

for(int i = 0; i < empresa.empregados.length; i++){
    Funcionario f = new Funcionario();
    f.setNome("Francisco");
    f.setSalario(i * 100);
    // somente está criando o objeto funcionário, faltou incluir no array de empregados
}

Olá Luis,

O erro ocorre pois você não está adicionando os funcionários no seu array, com isso você recebe um nullpointerexception ao tentar acessar o metodo getNome() de uma referencia nula.

Para resolver o problema, primeiramente você deve adicionar o empregado no array dentro do seu for conforme exemplo abaixo:

for(int i = 0; i < empresa.empregados.length; i++){
            Funcionario f = new Funcionario();
            f.setNome("Francisco");
            f.setSalario(i * 100);
            empresa.empregados[i] = f;    
        }

Além disso é uma boa pratica validar se o objeto não é nulo antes de tentar ler seus metodos, para isso você poderia fazer algo parecido com o abaixo:

 void getEmpregados(){
        for(int i = 0; i < this.empregados.length; i++){
        if(this.empregados[i] !=null){
            System.out.println(this.empregados[i].getNome() + ", salario : R$" + this.empregados[i].getSalario());
    }        
    }            
    }

Olá Luiz, conseguiu resolver o problema?

Se sim, por gentileza, marque o tópico como resolvido.

Obrigado.