ArrayIndexOutOfBoundsException

8 respostas
F

Senhores,

Estou com o seguinte erro ao tentar executar uma classe:

java.lang.ArrayIndexOutOfBoundsException: 500
at com.empresa.Classe.main(Classe.java:97)
Exception in thread “main”

linha 97:

limites[++index] = new int[] {Integer.parseInt(ensBegin), Integer.parseInt(ensEnd)};

o que fazer para solucionar esse erro?

8 Respostas

BrunoBastosPJ
limites[ ] = new int[] {Integer.parseInt(ensBegin), Integer.parseInt(ensEnd)};
F

O que é mais engraçado, é que essa classe faz uma consulta em um mdb e grava um arquivo txt. Quando eu mudo para um outro mdb, a classe funciona normalmente.

Esse erro tem alguma relação com os dados que estão sendo utilizados desse bd?

BrunoBastosPJ

essa linha de código vai dar erro se o array for unidimencional… mas se for um array bidimencional ela vai funcionar.

por exemplo se você tiver o codigo

int index = 0;
int limites[][] =  new int[5][];
limites[++index] = new int[] {Integer.parseInt(ensBegin), Integer.parseInt(ensEnd)};
B

Ola

A questão é, o acesso ao index… quando vc usa “++index” ele incrementa primeiro depois faz a outra operação, veja a diferença:

int[] qq = new int[]{55,66};
int index = 0;
while(index < qq.length){
  System.out.println(qq[index++]);
}

No codigo acima vai rodar legal, mas agora da erro:

int[] qq = new int[]{55,66};
  	int index = 0;
  	while(index < qq.length){
  	  System.out.println(qq[++index]);
  	}

Tudo por causa de um ++ no lugar errado…

F

Certo,

mas eu achei o erro, fui no debug linha por linha e achei o problema.

nessa linha:

int limites[][]= new int [500][];

substitui o 500 por 1000 e foi normalmente.

Valeu pela força Senhores !

B

“FabianoPatricio”:
Certo,

mas eu achei o erro, fui no debug linha por linha e achei o problema.

nessa linha:

int limites[][]= new int [500][];

substitui o 500 por 1000 e foi normalmente.

Valeu pela força Senhores !

Não é este o problema, o problema é que quando vc instancia um array de 500 posições, o ultimo que vc pode acessar é o de index 499, porque a contagem começa em 0.

D

“FabianoPatricio”:
Certo,

mas eu achei o erro, fui no debug linha por linha e achei o problema.

nessa linha:

int limites[][]= new int [500][];

substitui o 500 por 1000 e foi normalmente.

Valeu pela força Senhores !

essa não é a melhor solução para o seu problema, a não ser que você garanta que nunca irá tentar acessar a posição 1000, conforme o colega bruno já mencionou. Pois ao tentar acessa-la você terá problemas como o que está ocorrendo atualmente. E isso parece ser fácil de ser reproduzido com o tempo, visto que você busca os dados para este array em um mdb.
Seria interessante você criar este array com um tamanho dinamico e certificar-se que não irá acessar a posição, do numero informado.
São duas coisas distintas, o tamanho do array e o index de um array.

F

Colega,

Conforme a regra do negocio aqui da empresa, na verdade não poderia ultrapassar 500 posições, com o valor de 1000 eu já estou furando a regra de negocio, mas eu já consegui resolver e voltar as 500 posições.
O problema estava no tamanho do banco de dados que estava rodando.

Valeu pela força Senhores !!

Fabiano.

Criado 18 de julho de 2006
Ultima resposta 18 de jul. de 2006
Respostas 8
Participantes 4