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

NullPointerExceptiont

Olá a todos, bom dia.

Estou com muitas dificuldades nessa área de Arrays.

Alguém saberia me dizer, o que no meu código está errado?

O Java diz isso: Exception in thread "main" java.lang.NullPointerExceptiont testeempresa.TesteEmpresa.main

package testeempresa;

class Funcionario{
    String nome, rg,departamento;
    double salario;            
    int idade;
    Empresa empregados;

    void mostra(){
        for(int i = 0; i < 10; i++){ 
            if (empregados == null)continue; 

            System.out.println();

        } 
    }
}

class Empresa{

    String nomeEmpresa;
    String cnpj;
    Funcionario[] empregados;
    int livre = 0;

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

public class TesteEmpresa {

    public static void main(String[] args) {

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

    Funcionario f1 = new Funcionario();
    f1.salario = 1000;
    f1.nome = "Renato Augusto";
    empresa.adiciona(f1);
    empresa.empregados[1].mostra();

    Funcionario f2 = new Funcionario();
    f2.salario = 1500;
    f2.nome = "Daliene Soares";
    empresa.adiciona(f2);
    empresa.empregados[2].mostra();   

    Funcionario f3 = new Funcionario();
    f3.salario = 1700;
    f3.nome = "Pedro Cardoso";
    empresa.adiciona(f3);
    empresa.empregados[3].mostra();



    }
}
7 respostas
solução!

Fala Renato, tudo bom?

Quando trabalhamos com array, é importante sempre lembrarmos que todo array começa na posição zero. Então no seu código, o melhor seria acessar primeiro a posição zero:

//resto da classe
Funcionario f1 = new Funcionario();
    f1.salario = 1000;
    f1.nome = "Renato Augusto";
    empresa.adiciona(f1);
    empresa.empregados[0].mostra(); //começa por zero

    Funcionario f2 = new Funcionario();
    f2.salario = 1500;
    f2.nome = "Daliene Soares";
    empresa.adiciona(f2);
    empresa.empregados[1].mostra(); // agora sim vamos pra posição 1

    Funcionario f3 = new Funcionario();
    f3.salario = 1700;
    f3.nome = "Pedro Cardoso";
    empresa.adiciona(f3);
    empresa.empregados[2].mostra(); // posição dois... e assim por diante

O problema estava ocorrendo pois, até então, não havia nada na posição 1, 2 e 3 mas sim na posição 0, 1 e 2 =)

Qualquer dificuldade compartilhe com a gente e bons estudos!

Você está tentando acessar uma referencia nula no seguinte trecho:

empresa.adiciona(f1);
empresa.empregados[1].mostra();

O método "adiciona" está incluindo o empregado no índice "0" do array, e em seguida está acessando o índice "1", que ainda é null.

Verdade André, muito obrigado.

Algo tão simples e eu dando mole. rsrs

Obrigado.

Obrigado pela resposta Marcelo.

Corrigir e agora está funcionando perfeitamente. Estava quebrando a cabeça aqui.

Será que você poderia me tirar só mais uma duvida.

Continuei fazendo alterações no código, porém da maneira que o código está agora, ele compila e aparece as informações que eu quero, mas diz que é null para as Arrays que não receberam informação.

Existe alguma maneira dele mais elegante na programação de compilar e ignorar o fato de não ter informação alí?

package testeempresa;

class Funcionario{
    String nome, rg,departamento;
    double salario;            
    int idade;
    Empresa empregados;

    void mostra(){
        for(int i = 0; i < 10; i++){ 
            if (empregados == null)continue; 

            System.out.println();

        } 
    }
}

public class TesteEmpresa {

    public static void main(String[] args) {

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

    Funcionario f1 = new Funcionario();
    f1.salario = 1000;
    f1.nome = "Renato Augusto";
    empresa.adiciona(f1);
    empresa.empregados[0].mostra();

    Funcionario f2 = new Funcionario();
    f2.salario = 1500;
    f2.nome = "Daliene Soares";
    empresa.adiciona(f2);
    empresa.empregados[1].mostra();   

    Funcionario f3 = new Funcionario();
    f3.salario = 1700;
    f3.nome = "Pedro Cardoso";
    empresa.adiciona(f3);
    empresa.empregados[2].mostra();

    empresa.mostraEmpregados();    
    }
}  

class Empresa{

    String nomeEmpresa;
    String cnpj;
    Funcionario[] empregados;
    int livre = 0;

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

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

Opa, com certeza! Você só poderia abrir um outro topico no forum pra sua nova duvida?

Assim, caso alguém tenha uma duvida parecida fica mais facil de achar a solução também =)

Garanto que ela será respondida bem rapido!

Está certo André, já estou fazendo isso então. Muito obrigado.