Erro Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size
8 respostas
Aramis_Marques
Ola galera, eu sei que ja vi esse tópico por ai,e tentei as soluções propostas, mas não deram certo,alguém poderia me ajudar com esse erro?
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at samta.TelaPrincipal.jmiSimulacaoExecutarActionPerformed(TelaPrincipal.java:1007)
at samta.TelaPrincipal.access$1200(TelaPrincipal.java:23)
at samta.TelaPrincipal$14.actionPerformed(TelaPrincipal.java:527)
for(inti=0; i < movimentacaoClusters.size(); i++){
TelaPrincipal.energiaMovimentacao.add(newEnergiaMovimentacao(movimentacaoClusters.get(i),
TelaPrincipal.grupoEnergia.getEnergia().get(i)));}
//Fazaimpress�onateladoresultadoencontradonasimula��oif(jrbmConformacoes.isSelected()){
EnergiaMovimentacaoHandler.ordenarDecrescenteMovimentacao(this.energiaMovimentacao);}
Esse erro é porque você tem um vetor de tamanho 1 e tenta acessar a posição 1 dele.
Mas lembre-se, vetores (ao menos em Java) iniciam sua alocação na posição 0, ou seja, um vetor de tamanho 1 tem um Objeto na posição 0.
int[] vetor = new int[] {1};
int x = vetor[1];
Vai gerar a exceção que tu comentou, nesse caso, teria de acessar somente a posição 0.
Seu problema está aqui:
movimentacaoClusters.get(i)
E/OU aqui:
TelaPrincipal.grupoEnergia.getEnergia().get(i)
Abraços.
P.s: ainda aposto na segunda opção.
gabrielhof
O problema está aqui:
for(inti=0; i < movimentacaoClusters.size(); i++)
o certo seria: for (int i = 0; i < movimentacaoClusters.size()-1; i++)
Aramis_Marques
Ola nel,vlw pela resposta,o problema que esse programa não é meu,o código ta meio complexo pra mim e eu to penando pra resolver esse bug,é um programa utilizado em quimica, não estou conseguindo os resultados que o programa teria que dar, os códigos da parte que vc mencionou:
publicMovimentacaoClusters(MoleculaTempomtAnterior,MoleculaTempomtPosterior){
setTempo(mtAnterior.getTempo());doublemovimentacao=0.0;for(inti=0; i < mtPosterior.getClusters().size(); i++ ){
Clusterant=mtAnterior.getClusters().get(i);Clusterpost=mtPosterior.getClusters().get(i);movimentacao+=(newAtomoBean(ant.getX(),ant.getY(),ant.getZ())).calcularDistancia(newAtomoBean(post.getX(),post.getY(),post.getZ()));}
setMovimentacao(movimentacao);}
publicMovimentacaoClusters(MoleculaTempomtAnterior,MoleculaTempomtPosterior){
setTempo(mtAnterior.getTempo());doublemovimentacao=0.0;for(inti=0; i < mtPosterior.getClusters().size(); i++ ){
Clusterant=mtAnterior.getClusters().get(i);Clusterpost=mtPosterior.getClusters().get(i);movimentacao+=(newAtomoBean(ant.getX(),ant.getY(),ant.getZ())).calcularDistancia(newAtomoBean(post.getX(),post.getY(),post.getZ()));}
setMovimentacao(movimentacao);}
Ae gabrielhof mudei ali para -1 e cuntinua o mesmo erro.
nel
gabrielhof:
O problema está aqui:
for(inti=0; i < movimentacaoClusters.size(); i++)
o certo seria: for (int i = 0; i < movimentacaoClusters.size()-1; i++)
Erro.
Já tem o sinal de < no for, não precisa do -1 ao fim.
Isso seria válido se fosse “<=”.
A questão é que dentro de um único for mais de um vetor é acessado, e é um desses vetores que possuem um tamanho inferior ao que está sendo percorrido.
Precisaria das classes, a forma como está sendo populado seu Array e etc, o ideal é que tu “debugasse” o código.
Sobre o seu problema, acho que isso resolve:
for (int i = 0; i < movimentacaoClusters.size(); i++) {
if(i < TelaPrincipal.grupoEnergia.getEnergia().size) {
TelaPrincipal.energiaMovimentacao.add(new EnergiaMovimentacao(movimentacaoClusters.get(i),
TelaPrincipal.grupoEnergia.getEnergia().get(i)));
}
}
Assim, você garante que a segunda lista que será acessada possui uma posição válida.
Abraços.
nel
Eu coloquei .size supondo que seja um AraryList mas se vor um vetor, é .lenght.
Esse seu método só é válido se o Arraylist do Objeto mtPosterior tiver exatamente o mesmo tamanho do Objeto mtPosterior. Se o Objeto mtPosterior possuir um tamanho maior que o Objeto mtAnterior, vai dar a mesma exceção. Isso porque você poderia estar acessando a posição 10 de um ArrayList que só existe no Objeto mtPosterior e não no Objeto mtAnterior. Portanto, reveja sua lógica ok?
Abraços.
Aramis_Marques
Vlw nel,vou dar mais uma olhada aqui,qualquer coisa se conseguir resolver o problema eu posto aqui.