• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

nakuro

Problema com arraylist/iteradores

4 mensagens neste tópico

Boas

Desculpem andar outra vez a chatear mas tou aqui com uns problemas que talvez me possam ajudar :P

/**
* Write a description of class Restaurante here.
* 
* @author (your name) 
* @version (a version number or a date)
*/
import java.util.ArrayList;
import java.util.Iterator;
public class Restaurante
{

private ArrayList<String> objecto = new ArrayList<String>();
Iterator <String> it= objecto.iterator();

public void reservarMesa (String Cliente)// reserva uma mesa
{
    objecto.add (Cliente);
}

public void eliminarReserva (String Cliente)//elimina uma reserva
{
    objecto.remove (Cliente);
}

public void listarReservas() // lista reservas
{
    while (it.hasNext())
    {
        System.out.println ("nome " + it.next());
    }
}
}

introduzo e elimino reservas e funciona, só que quando vou listar as reservas aparece isto:

semttuloau1.png

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

imprimindo it.next() estas a imprimir o objecto, tu keres a string

it.next().kualkercoisa()  nao me lembro =X. penso k é so isso.

abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que não percebi bem :P

eu tentei assim mas da o mesmo erro:

public void listarReservas() // lista reservas
{
    while (it.hasNext())
    {
        String temp= (String)it.next();
        System.out.println ("nome " + temp);
    }
}
}

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ConcurrentModificationException é a excepção que ocorre quando estás a alterar uma lista que estás a percorrer.

Imprimir o elemento obtido pelo método next() do iterador levará a que seja chamado o método toString() do objecto, neste caso visto ser um String, resultaria na apresentação correcta.

Qual é o código que estás a usar para mostrar os objectos. Isto é, o iterador que estás a usar é reiniciado através de uma nova atribuição? Estás a introduzir ou remover objectos da lista enquanto os estás a mostrar, isto é, no mesmo ciclo?

Já agora, basta colocares o erro em texto, até porque as imagens deixam um pouco a desejar :P

--- edit:

Estás a ver todo o texto que escrevi? Esquece metade!

É da hora e de ter saído de 2 horas de matemática.... enfim. Na verdade não podes modificar uma lista enquanto a iteras. Claro que me vais responder que não estás a iterar e a modificar ao mesmo tempo mas...

O iterador que estás a usar, no início, aponta para uma lista vazia, à medida que introduzes elementos na lista essa lista deixa de estar vazia e o iterador passa a ser inválido.

Muda o código para:

public void listarReservas() {
    Iterator it = objecto.iterator();
    while (it.hasNext()) {
        //uso do método toString para facilitar a leitura de código e, neste caso, a correcção do mesmo.
        System.out.println (it.next().toString());
    }
}

Nota que não podes declarar um iterador para uma lista e usá-lo depois de teres mudado a lista. Um iterador, por norma, declara-se e obtém-se dentro dos métodos que precorrem a lista, não se declara como um atributo do objecto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora