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)
[code] for (int i = 0; i < movimentacaoClusters.size(); i++)
{
TelaPrincipal.energiaMovimentacao.add(new EnergiaMovimentacao(movimentacaoClusters.get(i),
TelaPrincipal.grupoEnergia.getEnergia().get(i)));
}
// Faz a impress�o na tela do resultado encontrado na simula��o
if (jrbmConformacoes.isSelected())
{
EnergiaMovimentacaoHandler.ordenarDecrescenteMovimentacao(this.energiaMovimentacao);
}[/code]
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.
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:
public MovimentacaoClusters( MoleculaTempo mtAnterior, MoleculaTempo mtPosterior )
{
setTempo( mtAnterior.getTempo() );
double movimentacao = 0.0;
for ( int i = 0; i < mtPosterior.getClusters().size(); i++ )
{
Cluster ant = mtAnterior.getClusters().get( i );
Cluster post = mtPosterior.getClusters().get( i );
movimentacao += ( new AtomoBean( ant.getX(), ant.getY(), ant.getZ() ) ).calcularDistancia( new AtomoBean( post.getX(), post.getY(), post.getZ() ) );
}
setMovimentacao( movimentacao );
}
package samta;
import java.util.ArrayList;
public class GrupoEnergiaBean
{
private ArrayList <EnergiaBean> energia;
private ArrayList <String> nomeGrupo;
public GrupoEnergiaBean()
{
setEnergia( new ArrayList <EnergiaBean> () );
setNomeGrupo( new ArrayList<String> () );
}
public GrupoEnergiaBean( ArrayList <EnergiaBean> energia, ArrayList <String> nomeGrupo )
{
setEnergia( energia );
setNomeGrupo( nomeGrupo );
}
public void setGrupoEnergia( GrupoEnergiaBean grupo )
{
this.setEnergia( grupo.getEnergia() );
this.setNomeGrupo( grupo.getNomeGrupo() );
}
public ArrayList<EnergiaBean> getEnergia()
{
return energia;
}
public void setEnergia(ArrayList<EnergiaBean> energia)
{
this.energia = energia;
}
public ArrayList<String> getNomeGrupo()
{
return nomeGrupo;
}
public void setNomeGrupo(ArrayList<String> nomeGrupo)
{
this.nomeGrupo = nomeGrupo;
}
}
package samta;
import java.util.ArrayList;
public class EnergiaBean
{
private double tempo;
private ArrayList <Double> grupo;
public EnergiaBean()
{
setTempo( 0.0 );
setGrupo( new ArrayList <Double> () );
}
public EnergiaBean( double tempo, ArrayList <Double> grupo )
{
setTempo( tempo );
setGrupo( grupo );
}
public EnergiaBean( EnergiaBean energia )
{
setTempo( energia.getTempo() );
this.setGrupo( new ArrayList <Double> () );
for ( int i = 0; i < energia.getGrupo().size(); i++ )
{
this.getGrupo().add( Double.valueOf( energia.getGrupo().get( i ).doubleValue() ) );
}
}
public void setTempo( double tempo )
{
this.tempo = tempo;
}
public double getTempo()
{
return this.tempo;
}
public void setGrupo( ArrayList <Double> grupo )
{
this.grupo = grupo;
}
public ArrayList <Double> getGrupo()
{
return this.grupo;
}
}
for (int i = 0; i < movimentacaoClusters.size(); i++)
o certo seria: for (int i = 0; i < movimentacaoClusters.size()-1; i++) [/quote]
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.
[code]public MovimentacaoClusters( MoleculaTempo mtAnterior, MoleculaTempo mtPosterior )
{
setTempo( mtAnterior.getTempo() );
double movimentacao = 0.0;
for ( int i = 0; i < mtPosterior.getClusters().size(); i++ )
{
Cluster ant = mtAnterior.getClusters().get( i );
Cluster post = mtPosterior.getClusters().get( i );
movimentacao += ( new AtomoBean( ant.getX(), ant.getY(), ant.getZ() ) ).calcularDistancia( new AtomoBean( post.getX(), post.getY(), post.getZ() ) );
}
setMovimentacao( movimentacao );
} [/code]
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?