Problema para retornar valor anterior usando arraylist e iterator

7 respostas
P

Estou com problema ao usar um iterator em um arrayList, é o seguinte, crio o arraylist e o iterator da seguinte forma:

ArrayList<Object> dados = new ArrayList<Object>();   
    Iterator it = dados.iterator();   
ArrayList<Object> dados = new ArrayList<Object>();
    Iterator it = dados.iterator();

Aqui eu armazeno o peso corrente e o peso anterior:

for(int i = 1; i > 0; i++){    
//Dados corrente   
peso1 = serial.getPeso1();   
//Peso anterior   
peso2 = Double.parseDouble(dados.get(i - 1).toString());   
}   
for(int i = 1; i > 0; i++){ 
//Dados corrente
peso1 = serial.getPeso1();
//Peso anterior
peso2 = Double.parseDouble(dados.get(i - 1).toString());
}

A idéia é deixar o laço for em loop infinito mesmo, o meu grande problema que o i - 1 vem sempre igual ao valor corrente, mesmo quando ele não é, já fiz o teste e mesmo quando o valor anterior é diferente ela printa igual ao valor corrente.
Será que estou agregando o valor errado ou usando o iterator de forma errada?

7 Respostas

davidbuzatto

Amigo, vc falou que a idéia é usar um loop infinito, mas vc esta dando um get( int ) em dados e provavemente obtendo uma posição inválida.
Quanto ao uso do iterator, vc não está usando ele em nenhum lugar percebeu? Para usar o get de List vc não precisa usar um iterator. O iterator é outra forma de iterar por uma lista. No seu loop infinito vc precisaria usar um while e resetar o índice do array list para que ele seja percorrido novamente.

int i = 0;

while ( true ) {
    // atingiu última posição
    if ( i == dados.size() ) {
        i = 0;
    } else {
        dados.get( i );
        i++;
    }
}

Falow!

eduveks

Meu não sei se vou dizer besteira, mas como o código não esta completo, vou tentar adivinhar :lol:

i começa com 1 !?..

for(int i = 1; i > 0; i++){ //Dados corrente

Aqui vc gera um valor e coloca no array dados… certo?

peso1 = serial.getPeso1();

Aqui vc pega a informação do peso anterior… certo?

//Peso anterior peso2 = Double.parseDouble(dados.get(i - 1).toString()); }

E o problema é q o valor do peso1 e do peso2 são iguais… certo?

Se sim sim sim, então o problema pode ser dois :D, tudo depende do que você esta fazendo no getPeso1()…

Se vc tiver gerando um novo número e colocando na collection “dados”, então repara…

primeiro loop…

peso1 = serial.getPeso1();

faz um:

dados.Add(new Double(2.3));

Isto vai ficar no dados.get(0), posição ZERO!

Sendo q i começa com 1… i - 1 = 0 ZERO logo o dados.get(i - 1) vai retornar o valor q foi adicionado e não o anterior…

E depois nos outros loops acontece o mesmo…

Solução… acho q vc já deve saber daqui pra frente mas qualquer dúvida posso te dar uma luz :idea:

P

Netuno não consegui pescar a solução da sua dica. Como fazer para eu conseguir recuperar o valor anterior? Acho que não estou acertando em ficar dando o add nos valores, deve estar tudo carregando na mesma posição. Mas como no meu código eu carrego em sequencia?

Sendo que não tem como eu pegar o tamanho do arraylist pois o loop vai ficar imputando dados em um textfield, então pode ficar um tempo de n (o usuário vai desligar isso).

eduveks

Então a lógica que segui se aplica? Já estou melhor q a mãe Diná :stuck_out_tongue:

Bem sendo assim acho q isto resolve o teu problema…

if (i > 1) {
    peso2 = Double.parseDouble(dados.get(i - 2).toString());
}

Por q, quando i é 1 é o primeiro loop e no primeiro loop não tem valor anterior… se o teu código estivesse certo, estaria dando erro do tipo “out of index”.

Então quando o i for igual a 2 ou maior, então entra e faz o i - 2 sempre, na primeira vez q entrar o i vai ser 2, e 2 - 2 igual a 0, logo vai pegar o primeiro peso, e depois dai por diante é sempre a mesma lógica…

se vc começar o i com 0 então o correto será:

if (i > 0) {
    peso2 = Double.parseDouble(dados.get(i - 1).toString());
}

sakou? se vc colocar o i = 0 vc vai ver q vai dar erro, por q ai sim teu código vai estar certo, mas faltando um IF para não executar a linha no primeiro loop, pois não existe o anterior no primeiro loop…

:wink:

P

Agora caiu a ficha aqui. Tá funcionando beleza. Valeu.

eduveks

:wink: boa!

atenção ao q o davidbuzatto disse, vc não esta fazendo uso de Interator, por isso os Interators declarados são dispensáveis.

good luck

P

Já tinha apagado todos.
:lol:

Criado 11 de junho de 2007
Ultima resposta 11 de jun. de 2007
Respostas 7
Participantes 3