Erro Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size

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]

Dese ja agradeço!

Oi!

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.

O problema está aqui:

for (int i = 0; i < movimentacaoClusters.size(); i++)  

o certo seria: for (int i = 0; i < movimentacaoClusters.size()-1; i++)

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

[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]

Ae gabrielhof mudei ali para -1 e cuntinua o mesmo erro.

[quote=gabrielhof]O problema está aqui:

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.

Eu coloquei .size supondo que seja um AraryList mas se vor um vetor, é .lenght.

Mais um detalhe:

[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?

Abraços.

Vlw nel,vou dar mais uma olhada aqui,qualquer coisa se conseguir resolver o problema eu posto aqui.