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

Erro java.lang.ArrayIndexOutofBoundsException

Olá pessoal, por favor podem me ajudar, no exercicio 3 de arrays no Primeiro Passos com Java ao executar a classe TestaEmpresa, surge o seguinte erro:

   Exception in thread "main" java.lang.ArrayIndexOutofBoundsException: 10
               at Empresa.adicionaFuncionario(Empresa.java:10)
               at TestaEmpresa.main(TestaEmpresa.java:8)

Alguém sabe me dizer porque ocorre este erro?

Abaixo seguem as classes que criei:

 class Empresa{

   String nome;
   int    cnpj;
   Funcionario[] empregado;

   void adicionaFuncionario(Funcionario func){
      for(int i=0; i<= this.empregado.length; i++){
          if(this.empregado[i] == null){
            this.empregado[i]= func;
           }
          }
    }

   void mostraEmpregado(){
       for (int i=0; i< this.empregado.length; i++){
          System.out.println("Funcionário na posicao:" + i);
          System.out.println("R$" + this.empregado[i].salario);
       }
   }
}

class Funcionario{

   String nome;
   String departamento;
   double salario;
   String data;
   String rg;

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

    double calculaGanhoAnual (){
        return salario *12;
    }

    void descontos (double valor){
        this.salario -= valor;
    }

    void mostra(){
      System.out.println("Nome:" + this.nome);
      System.out.println("Departamento:" + this.departamento);
      System.out.println("Salario:" + this.salario);
      System.out.println("Data de Admissao:" + this.data);
    }
}

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

          Funcionario f1 = new Funcionario();
          f1.salario = 3500;
          emp.adicionaFuncionario(f1);

          Funcionario f2 = new Funcionario();
          f2.salario = 2200;
          emp.adicionaFuncionario(f2);

          Funcionario f3 = new Funcionario();
          f3.salario = 1500;
          emp.adicionaFuncionario(f3);
     }
}
4 respostas
solução!

Quando voce for fazer um loop no array, nunca pode colocar que a condição do loop é i <= array.length. Os índices do array começam a contar do zero, logo, o length do array sempre vai retornar um numero maior do que o numero do ultimo indice do array. Por exemplo, considere um array de tamanho 5. O seus elementos tem os seguintes indices: array[0], array[1], array[2], array[3] e array[4]. Quando você coloca o "i <= array.length", o loop vai tentar chamar o elemento que está em array[5]. Dessa forma, voce está chamando elementos que está fora dos limites do array, ou seja "Out Of Bounds". A exceção que você recebeu é a seguinte: ArrayIndexOutOfBoundsException: Exceção do tipo índice do array fora dos limites. Ou seja, array[5] está fora dos limites de um array de tamanho 5.

Obrigado Fábio, coloquei o loop como i<=array.length -1 e deu certo, valeu a dica.

É mais elegante colocar i < array.length

show...