Dúvida com ArrayList!

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.

public void eleitoPresidente() {
int maior = 0;
for (Candidato e: 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 :slight_smile:

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:

public void eleitoPresidente() {
    int maiorVotacao = 0;//
    Candidato eleito = null;
    for (Candidato e : this.canditato) {
        if (e.votos > maiorVotacao) {
            maiorVotacao = e.votos;//pega a votação mais alta
            eleito = e;
        }
    }
    System.out.println(eleito.nome+" com "+eleito.votos+" votos");

}

Para fins de desempate:

public void eleitoPresidente() {
    ArrayList<Candidato> resultado = new ArrayList<>();

    int maiorVotacao = 0;//
    for (Candidato e : this.canditato) {
        if (e.votos > maiorVotacao) {
            maiorVotacao = e.votos;//pega a votação mais alta
        }
    }
    //vê quais candidatos tem a maior pontuação
    for (Candidato candidato : 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 eleito
    for (int i = 0; i < canditato.size(); i++) {
        if (canditato.get(i).votos == maiorVotacao) {//só imprime quem tiver maior pontuação
            System.out.println((i + 1) + "º - " + canditato.get(i).nome);
        }            
    }
}

Variando a codificação:

public void eleitoPresidente() {
    //ordena os candidatos em ordem de crescente neste caso, pois implementei o comparable
    Collections.sort(canditato);//linha abaixo separa os candidatos e a seguinte da o resultado
    ArrayList<Candidato> resultado = new ArrayList<>(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));
}

private static class Candidato implements Comparable<Candidato> {
    String nome;
    int votos;

    public Candidato(String nome, int votos) {
        this.nome = nome;
        this.votos = votos;
    }
    @Override
    public int compareTo(Candidato t) {
        return Float.compare(t.votos, votos);
    }
}