[Resolvido]java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

Ai gente, deve ser algo bem basico mesmo mas eu to apanhando nessa exception e não to entendendo. Eu tenho um List de Produtos e estou fazendo um método para alterar um produto da lista. Esse é meu método:

public void atualizar(Produtos p) throws Exception { for( int i = 1; i <= produtos.size(); i++){ if(produtos.get(i).equals(p)){ // essa é a linha 21 mostrada na exception produtos.remove(i); produtos.add(p); } } }
e essa a exception:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.get(ArrayList.java:322) at dados.ProdutosDb.atualizar(ProdutosDb.java:21)

eu sei que esse tipo de erro é quando eu tento acessar um elemento na maior do que tem na lista, mas no erro ta mostrando index:1 e size: 1, ai eu não entendi. Alguem pode me explicar?

Listas e Arrays tem como posição inicial 0 (zero), não 1 (um). Pense nisso!

Guilherme, obrigado pela ajuda, eu realmente avia me equivocado nisso então eu alterei o meu for para começar do zero mas obtive o mesmo resultado.

Coloque < ao inves de <=.

Ele esta passa tanto pela posicao 0 e 1 do array.

Hail

if(produtos.get(i).equals(p)) // Você tem certeza que deve passar o i para o get? // Caso não tente assim if(produtos[i].get().equals(p))

Abraço

Oi,

Faz assim.:

public void atualizar(Produtos p) throws Exception {
        for( int i = 0; i < produtos.size(); i++){
            if(produtos.get(i).equals(p)){ // essa é a linha 21 mostrada na exception
                produtos.remove(i);
                produtos.add(p);
            }
        }
    }

Tchauzin!

1 curtida

Ai gente, muito obrigado, agora ta funcionando certo. Abraços!

[quote=Dantalian]Hail

if(produtos.get(i).equals(p)) // Você tem certeza que deve passar o i para o get?
// Caso não tente assim
if(produtos[i].get().equals(p))

Abraço[/quote]

Oi,

O método get(int) de uma ArrayList é obrigatório passar como parametro um número inteiro. =)

Tchauzin!

Mais simples so copia o da Lina. :smiley:

Oi,

Podeira postar qual a solução que fez funcionar? Assim outras pessoas com a mesma dúvida saberão a resposta.

Tchauzin!

[quote=lina]

Oi,

O método get(int) de uma ArrayList é obrigatório passar como parametro um número inteiro. =)

Tchauzin![/quote]

Brigado por esclarecer Lina ^^

thx!

Eu fiz como o mathiasnw e a lina indicaram. Troquei o <= por <. Abraços.

1 curtida