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

Dúvida no Ex. 4 da Aula 4 - Arrays

Iai ,pessoal!

Estou tentando imprimir os salários dos funcionários que criei (somente dois até agora) porém, depois de compilar e rodar o programa, está aparecendo mais um funcionário e o seguinte erro: "Exception in thread "main" java.lang.NullPointerException at Empresa.mostraEmpregados(TestaFuncionario.java:41) at TestaEmpresa.main(TestaFuncionario.java:93)"

Segue o código abaixo:

class Funcionario{
    String nome;
    Data dataEntrada;
    String rg;
    String departamento;
    double salario;

    void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Data de Entrada: " + this.dataEntrada.getFormatada());
        System.out.println("RG: " + this.rg);
        System.out.println("Salario Inicial: " + this.salario);
        System.out.println("Ganho Anual: " + this.calculaGanhoAnual() + "\n\n");

    }

    void recebeAumento(double valorAserAcrescentado){
        this.salario += valorAserAcrescentado;
    }

    double calculaGanhoAnual(){
        return this.salario * 12;
    }
}

class Empresa{
    String nome;
    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("Empregado " + (i+1));
                System.out.println("Salario: R$ " + this.empregados[i].salario);
        }
    }
}

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

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

}


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

    Funcionario f1 = new Funcionario();
    f1.dataEntrada = new Data();

    f1.salario = 6000;
    f1.nome = "Thalys";
    f1.dataEntrada.preencheData(14,8,2015);
    f1.rg = "123456789";
    f1.departamento = "Estudos Java";
    empresa.adiciona(f1);

    Funcionario f2 = new Funcionario();
    f2.dataEntrada = new Data();

    f2.salario = 2000;
    f2.nome = "Sylath";
    f2.dataEntrada.preencheData(13,8,2015);
    f2.rg = "123456787";
    f2.departamento = "Estudos Java";
    empresa.adiciona(f2);


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

    empresa.mostraEmpregados();

    }
}
4 respostas

Boa noite, tudo bem?

Bom Thalys não tenho certeza, mas acredito que o erro em si, seja por causa do Funcionario[] empregados:

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

Caso não esteja enganado, Arrays em java não mudam de tamanho, tenta já dar um tamanho inicial para ele:

Funcionario[10] empregados;

ou usar um ArrayList, pois ArrayList podem começar sem conteúdo algum e depois podem ir aumentando.

ArrayList<Funcionario> empregados;

Se falei besteira, alguém me corrige, pois tenho pouca experiência em java...

Espero ter ajudado.

solução!

Boa noite Thalys seu problema é bem mais simples você tem o seguinte metodo: void mostraEmpregados(){ for(int i = 0; i < this.empregados.length; i++){ System.out.println("Empregado " + (i+1)); System.out.println("Salario: R$ " + this.empregados[i].salario); } }

o problema está na seguinte expressão: int i = 0; i < this.empregados.length; i++ do for

o que acontece (teste de mesa) temos por exemplo 2 funcionarios certo?

só que :

1º o vetor sempre começa na posição 0 correto? até ai tudo bem sua expressão está OK

mas, ola a seguinte expressão: i < this.empregados.length supondo que temos 2 empregados levando em consideração que começamos no 0 (zero) de acordo com a sua expressão temos 3 funcionários.

isso gera uma exceção no seu vetor chamada de ArrayIndexOfBounds primeiramente, só que o que acontece de fato:

levando em consideração esse erro olha só o que acontece com o resultado das linhas abaixo:

System.out.println("Empregado " + (i+1)); System.out.println("Salario: R$ " + this.empregados[i].salario);

-------------- Saida ------------------------------ Empregado 1 Salario: R$ 6000

Empregado 2 Salario R$ 20000

Empregao 3 NullPointerException


O NullPointerException é devido a você tentar acessar um atributo de um funcionario que não existe:

this.empregados[0].salario --> OK this.empregados[1].salario --> OK this.empregados[2].salario --> ERRO NÃO EXISTE EMPREGADO NESSA POSIÇÃO...

assim para resolver seu problema você deve arrumar a expressão do for da seguinte forma:

for(int i = 0; i < this.empregados.length-1; i++){ System.out.println("Empregado " + (i+1)); System.out.println("Salario: R$ " + this.empregados[i].salario); } }

Valeu, Anderson! Consegui entender aqui.

Disponha, precisar estamos ai