Ajuda com Iterator

5 respostas
Heartbreaker
Estou fazendo um programa que vai simular uma votação. Esta é a classe que representara o candidato e seus votos:
public class Candidato {
	private String nome;
	private  String cod;
	private  int votos;

	public Candidato(String nome, String cod) {
		this.nome = nome;
		this.cod = cod;
		votos = 0;
	}

	public void addVoto() {
		votos++;
	}
Eu terei uma LinkedList com os candidatos que já estara instanciada e zerada quando eu começar a votação. Quando quero efetuar um voto, passo por parametro o codigo do candidato e preciso procurar na LinkedList qual dos candidatos possui aquele codigo e então incrementar sua quantidade de votos por meio do addVoto(). Eu consigo encontrar qual elemento da lista é o candidato que eu quero, mas eu não sei como fazer pra dar um addVoto nele.
private void Votar(String codigo) {
		while(iterator.hasNext()){
			if(iterator.next().getCod().equals(codigo)){
				//não sei o que fazer aqui
			}
				
		}
		}

5 Respostas

lele_vader

Vc pode usar o iterator.next(), que vai retornar o seu objeto.

Dai vc chama o addVoto nele e após isso

chama o método set (int index, Object element) a partir do seu objeto da sua lista.

Esse método vai mudar o objeto na posição da index da lista e o objeto que vai modificar o da lista.

Dai após a lista deve ficar atualizada.

OBS: Não cheguei a testar. Favor implementar e dizer se funcionou.

Se alguém disser uma implementação melhor, por favor fique a vontade.

Outra coisa. Se os candidatos não são repetidos, talvez não fosse melhor usar uma implementação de set.
Daí você teria que implementar o hash code e equals para o Candidato e ao invés de chamar o método set la de list, chamaria o remove passando o objeto que você pegou com o next e chamaria add após para atualizar com o novo objeto atualizado.

Andersonrms

lele_vader:
Vc pode usar o iterator.next(), que vai retornar o seu objeto.

Dai vc chama o addVoto nele e após isso

chama o método set (int index, Object element) a partir do seu objeto da sua lista.

Esse método vai mudar o objeto na posição da index da lista e o objeto que vai modificar o da lista.

Dai após a lista deve ficar atualizada.

OBS: Não cheguei a testar. Favor implementar e dizer se funcionou.

Se alguém disser uma implementação melhor, por favor fique a vontade.

Outra coisa. Se os candidatos não são repetidos, talvez não fosse melhor usar uma implementação de set.
Daí você teria que implementar o hash code e equals para o Candidato e ao invés de chamar o método set la de list, chamaria o remove passando o objeto que você pegou com o next e chamaria add após para atualizar com o novo objeto atualizado.

Não é preciso chamar o set da lista, a variável de referência estará referenciando o msm objeto da lista, ou seja, modificando o estado do objeto dentro do método votar, tb modificará o estado do objeto da lista.

Andersonrms

Heartbreaker

Desculpem mas eu ainda sou noob e não sei como obter o índice da lista em que o iterator está. Não tem um jeito de eu manipular um objeto diretamente na lista sem dar next()?
O problema é que eu teria que dar um next() pra verificar se é o candidato com o codigo e outro next() pra addVoto(). Se tivesse um jeito de manipular o objeto atual sem dar next() resolveria o meu problema.

Heartbreaker
Eu também poderia fazer a "gambiarra" de ir incrementando um índice mas creio que haja uma solução mais sofisticada que isso:
private void Votar(String codigo) {
		int i = -1;
		while(iterator.hasNext()){
			i++;
			Candidato atual = iterator.next();
			if(atual.getCod().equals("codigo")){
			atual.addVoto();
			urna.set(i, atual);
			}
				
		}
		}
Criado 26 de abril de 2012
Ultima resposta 27 de abr. de 2012
Respostas 5
Participantes 3