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.