Eu estou fazendo um sistema de eleição básico, mas estou com um problema em dizer qual candidato foi eleito. No caso, eu adicionei três candidatos(x, y, z) numa ArrayList, coloquei dois votos no x, três no y e quatro no z, quando quero saber qual foi o que ganhou(no caso o que obteve mais votos) ele imprime todos os 3 candidatos.
publicvoideleitoPresidente(){intmaior=0;for(Candidatoe:candidato){if(e.votos>maior){maior=e.votos;System.out.println("O presidente eleito é: "+e.nome);}}}
Quero que ele imprima somente o candidato com o maior número de votos. Agradeço desde já. Qualquer coisa é só perguntar
Esta dentro do for, e ele esta verificando todo mundo, logo vai imprimir todo mundo:
Solução simples nestas condições:
Crie uma variável do tipo candidato antes do for, e toda vez que a votação for atualizada, o candidato também é atualizado.
Jogue a impressão pra fora do for, assim só vai pegar o vencedor, mais vai ter que chamar a variável candidato criada antes do for.
Veja:
publicvoideleitoPresidente(){intmaiorVotacao=0;//Candidatoeleito=null;for(Candidatoe:this.canditato){if(e.votos>maiorVotacao){maiorVotacao=e.votos;//pega a votação mais altaeleito=e;}}System.out.println(eleito.nome+" com "+eleito.votos+" votos");
}
A
anon62916717
Para fins de desempate:
publicvoideleitoPresidente(){ArrayList<Candidato>resultado=newArrayList<>();intmaiorVotacao=0;//for(Candidatoe:this.canditato){if(e.votos>maiorVotacao){maiorVotacao=e.votos;//pega a votação mais alta}}//vê quais candidatos tem a maior pontuaçãofor(Candidatocandidato:canditato){if(candidato.votos==maiorVotacao){resultado.add(candidato);}}System.out.println("RESULTADO DA APURAÇÃO\n"+(resultado.size()>0?"EMPATE ENTRE OS CANDIDADO":"ELEITO")+":\n");//informa os candidatos que empatam ou o eleitofor(inti=0;i<canditato.size();i++){if(canditato.get(i).votos==maiorVotacao){//só imprime quem tiver maior pontuaçãoSystem.out.println((i+1)+"º - "+canditato.get(i).nome);}}}
A
anon62916717
Variando a codificação:
publicvoideleitoPresidente(){//ordena os candidatos em ordem de crescente neste caso, pois implementei o comparableCollections.sort(canditato);//linha abaixo separa os candidatos e a seguinte da o resultadoArrayList<Candidato>resultado=newArrayList<>(canditato.stream().filter(candi->candi.votos==canditato.get(0).votos).collect(Collectors.toList()));System.out.println((resultado.size()>1?"TEMOS EMPATE":"ELEITO")+"\n"+resultado.stream().map(candidato->candidato.nome+" "+candidato.votos+"\n").reduce("",String::concat));}privatestaticclassCandidatoimplementsComparable<Candidato>{Stringnome;intvotos;publicCandidato(Stringnome,intvotos){this.nome=nome;this.votos=votos;}@OverridepublicintcompareTo(Candidatot){returnFloat.compare(t.votos,votos);}}