Estou fazendo um programa que vai simular uma votação. Esta é a classe que representara o candidato e seus votos:
[code]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++;
}
[/code]
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
}
}
}
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.
[quote=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.
[/quote]
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.
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.
Eu também poderia fazer a “gambiarra” de ir incrementando um índice mas creio que haja uma solução mais sofisticada que isso:
[code]
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);
}
}
}[/code]