Adicionando objetos especificando o index em um ArrayList[RESOLVIDO]
16 respostas
J
JWell
Por que ao adicionar
for(inti=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!!
Ea jwell, no seu código não vejo nada de estranho, coloque ele todo, que tipo é objList?
flw
L
luciene.silva
vc deve estar uitlizando o objList em outro lugar…
J
JWell
Então galera! Muito obrigado pelo feedback desde já.
objList é do tipo
Resolvi (de maneira grotesca) o problema da seguinte forma:
for(intk=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?
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.
J
JWell
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.
`
Ó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!
andeb
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.
J
JWell
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!!
andeb
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.
J
JWell
Justamamente isso que preciso!!
PARA CADA (hipotéticamente) item quero adicionar os produtos correspondentes a ele concatenados com “~~”
Deu pra ter uma idéia melhor agora do problema que ta me deixando careca??? rs
B
Bruno_Laturner
JWell, já tentou rodar o programa com um debugador? Fique monitorando a variável objList desde a sua criação.
J
JWell
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 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!
andeb
err, desculpe, não
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
B
Bruno_Laturner
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.
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.
J
JWell
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.
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 !!
ViniGodoy
Estranho tantos responderem, e nenhum falar o que eu considerava o óbvio. :shock: