Adicionando objetos especificando o index em um ArrayList[RESOLVIDO]

Por que ao adicionar


for(int i = 0; i < 1; i++){
    objList.add(i,objList.get(i)+"Teste");
}

Por que q quando a lista sai do laço, ela fica com o tamanho maior que 1???
No meu caso, o tamanho exato dela é 4.
E em nenhum momento estou incrementando o “i” em nenhum outro lugar do código!!

POR FAVOR… JÁ NÃO TENHO MAIS CABELOS PRA LUXAR =D

Thank’s in advance!

Ea jwell, no seu código não vejo nada de estranho, coloque ele todo, que tipo é objList?
flw

vc deve estar uitlizando o objList em outro lugar…

Então galera! Muito obrigado pelo feedback desde já.
objList é do tipo

Resolvi (de maneira grotesca) o problema da seguinte forma:


for(int k = objList.size() - 1; k > i; k--){
     objList.remove(k);				
}

Então, quanto a postar o código inteir, ele é enorme aposto que não vão querer olhar hahaha
Mas acreditem, meu código está cheio de System.out.println, o console parece o filme de GUERRA NAS ESTRELAS hahaha E NÃO COLOQUEI ELE EM NENHUM OUTRO LUGAR.

INclusive, para vcs terem certeza, eu tentei em cada linha (dei um CRTL F --procurar no eclipse-- para ter certeza ) colocar o index ingessado como “0”.
E deu na mesma.

Esse método era p funcionar, não era?

Olhe bem o código, em algum lugar do código fora esse, você TEM que ter adicionado algo a lista, se não o método:

objList.get(i)

Retornaria uma IndexOutOfBounds e falharia em tempo de execução. Logo você não precisa incrementa o i, basta chama esse método três vezes mais a inicialização. Uma sugestão é ver o valor da lista pra vê se ajuda.

[quote=andeb]Olhe bem o código, em algum lugar do código fora esse, você TEM que ter adicionado algo a lista, se não o método:

objList.get(i)

Retornaria uma IndexOutOfBounds e falharia em tempo de execução. Logo você não precisa incrementa o i, basta chama esse método três vezes mais a inicialização. Uma sugestão é ver o valor da lista pra vê se ajuda.[/quote]`

Ótima observação!!!
Eu havia esquecido de dizer que logo após a inicialização do loop, coloquei essa linha:

objList.add(i,"Teste");

Para somente depois fazer:

objList.add(i,objList.get(i)+"Teste");

Eu procurei " i " por " i " dentro de todos os loops E NADA!!

Fiz isso para desencargo, afinal, depois de:

objList.add(i,"Teste");

Só uso o :

objList.add(i,objList.get(i)+"Teste");

Dentro de uma condição. SÃO AS ÚNICAS VEZES QUE REFERENCIO ESSE CARA!!
Impossível isso meu, nem eu to acreditando!

Outra coisa, se você ver o valor da lista, é bem provável que você tenha: [“Teste”, “TesteTeste”, “TesteTeste”, “TesteTeste”], isso seria o correto, algo além disso seria estranho, também esse objList deve ser uma variável de instância ou estática e não uma variável local, certo? Eu acredito que você esteja chamando esse método que contém o for duas vezes acidentalmente, o que eu recomendo é colocar um breakpoint dentro do for e analisar o callstack.

BOm…agora fugimos um pouquinho do foco!
O problema é que está aparecendo um tamanho de lista maior que 1, sendo que o index indicado é " 0 " APENAS.
Ela não é local!! É global!

Não… ela (lista) só entra no loop uma vez, e como eu disse, só é usada nas duas linhas citadas acima. SOMENTE!

A concatenação é o de menos!

E o que deve aparecer é algo do tipo:

TesteTesteTesteTesteTeste

O que não é o mais relevante!

Vlw pela força amigo!! Mas eu só não consigo entender a questão do tamanho da lista!!

Corretíssimo, não vi que tá sendo setado o index pra 0 também, porém, não sei se é era isso que você esperava, mas setar o index como 0 só vai fazer jogar os elementos que tinham antes uma casa pra frente e não sobrescrever o que tinha na casa 0, pra isso existe o set(), então ainda acho que você está chamando esse método em mais de um lugar. :stuck_out_tongue:

Justamamente isso que preciso!!

PARA CADA (hipotéticamente) item quero adicionar os produtos correspondentes a ele concatenados com “~~”

ArrayList<String> objList = new ArrayList<String>()

for(int i = 0; i < item.length; i ++){
   objList.add(i,item[i]);


///////////////////////DEPOIS DE ALGUMAS CONSULTAS E DADOS TRATADOS////////////////////

//Dentro de outro for que está dentro de outro =D

objList.add(i,objList.get(i)+"~~"+produto);


}

Deu pra ter uma idéia melhor agora do problema que ta me deixando careca??? rs

JWell, já tentou rodar o programa com um debugador? Fique monitorando a variável objList desde a sua criação.

Então… conheço o netBeans, mas no eclipse não tenho nem noção de debugar… vai achar MUITO estranho, mas estou dentro de uma jsp =D
Não brigue comigo :smiley: Só me ajude a resolver essa questão…
Como posso debugar uma JSP no eclipse?

Talvez eu realmente consiga descobrir o problema assim, como nosso amigo acima citou!

err, desculpe, não :confused:
Retirando a parte das consultas e dados tratados, tens como colocar o método original aqui? Somente a estrutura com os for e objList…
Alias, nao entendi agora qual a natureza do erro, qual método você está rodando, o que tem o for com a condição ‘i < 0’ ou ‘i < item.length’? :S

Ainda estou tentando entender por que você está passando um índice pro add, ou mesmo usando o get para obter os itens. A menos que queria fazer as adições numa ordem diferente da normal, não tem por quê fazer isso.

Sobre debugar no Eclipse, mude para a perspectiva de debug e coloque os breakpoints na jsp mesmo.

Você está usando o add. O add adiciona um elemento naquele índice, movendo o que estava lá para a próxima posição.

Se você quer apenas substituir um elemento, use o método set.

[quote=ViniGodoy]Você está usando o add. O add adiciona um elemento naquele índice, movendo o que estava lá para a próxima posição.

Se você quer apenas substituir um elemento, use o método set.
[/quote]

ALELUIAAAAA!! hahaha Eu nem olhei a documentação e o respectivo método add, parecia tão “intuitivo” que nem pensei nisso!!
EIS A EXPLICAÇÃO PARA TANTO CABELO ARRANCADO rsrs
Vlw Mesmo Viny!!!

Esse método “set” parece perfeito a minha necessidade!!

Caramba, tão simples e eu me matando hahaha

Obrigado a todos que postaram e ajudaram !!

Estranho tantos responderem, e nenhum falar o que eu considerava o óbvio. :shock: