ArrayIndexOutOfBoundsException

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?

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

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?

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

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…

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 !

[quote=“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 ![/quote]

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.

[quote=“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 ![/quote]

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.

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.