Как исправить ошибку «зацикливания и голосования кандидатов» в Java

Я создаю систему голосования и хочу, чтобы система голосования работала до тех пор, пока пользователь не введет 0, и будет выведен кандидат, который победит.

два класса

 package javaexamcode; 
   import java.util.Scanner;

   public class JavaExamCode {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Nominee mickey = new Nominee("Mickey Mouse");
        Nominee donald = new Nominee("Donald Duck");
        Nominee minnie = new Nominee("Minnie Mouse");
        Nominee goofy = new Nominee("Goofy");

        Scanner in = new Scanner(System.in);
        while (true) {
            System.out.println();
            System.out.println("The presidential nominees are:");
            System.out.println("1. Mickey Mouse");
            System.out.println("2. Donald Duck");
            System.out.println("3. Minnie Mouse");
            System.out.println("4. Goofy");
            System.out.print("What is your vote? ");

            try{

                int vote=in.nextInt();

                if (vote==0){
                    break;
                }else if (vote == 1){
                    mickey.increaseVote();
                }else if (vote == 2){
                    donald.increaseVote();
                }else if (vote == 3){
                    minnie.increaseVote();
                }else if (vote ==4){
                    goofy.increaseVote();
                }
                else {
                    System.out.println("invalid");
                }
                break;
            } catch (Exception e){
                System.out.println("Invalid entry, try again");
                continue;

            }

        }
        Nominee[] candidates = new Nominee[]{mickey,donald,minnie,goofy};
        Nominee president = winner(candidates);

        System.out.println("The winner is " + president.toString() + " with " + president.totalVotes() + " votes.");
    }

    public static Nominee winner(Nominee[] all){
        Nominee most = all[0];

        for (int i = 1; i < all.length - 1; i++){
            if (all[i].totalVotes() > most.totalVotes()){
                most = all[i];
            }else if (all[i].totalVotes() == most.totalVotes()){
                String newName = all[i].toString() + " " + most.toString();
                most = new Nominee(newName, (all[i].totalVotes() + most.totalVotes()));
            }
        }

        return most;
    }

}






package javaexamcode; 
public class Nominee{
    private String name;
    private int votes;

    public Nominee(String name){
        this.name = name;
    }

    public Nominee (String name, int votes){
        this.name = name;
        this.votes = votes;
    }

    public void increaseVote(){
        votes++;
    }

    public String toString(){
        return name;
    }

    public int totalVotes(){
        return votes; 
    }

}

Также есть ошибка, когда вы набираете 4, тогда выводится, что победителем являются Микки и Минни с 0 голосами. Помощь будет принята с благодарностью

Я искал в Интернете, но не мог найти много

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
158
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем методе:

public static Nominee winner(Nominee[] all){
    Nominee most = all[0];

    for (int i = 1; i < all.length - 1; i++){
        if (all[i].totalVotes() > most.totalVotes()){
            most = all[i];
        }else if (all[i].totalVotes() == most.totalVotes()){
            String newName = all[i].toString() + " " + most.toString();
            most = new Nominee(newName, (all[i].totalVotes() + most.totalVotes()));
        }
    }

    return most;
}

ваш цикл for игнорирует последнего кандидата (в данном случае № 4) Вместо условия зацикливания i < all.length - 1 вам нужно зациклиться на i < all.length.

Большое спасибо!

HARLEEN 20.06.2019 01:51

Также я не могу заставить свою программу зацикливаться даже с помощью while (true)

HARLEEN 20.06.2019 01:59

у вас есть break; в блоке try. break немедленно выходит из цикла. Удалите его, и теперь он должен работать

EDToaster 20.06.2019 02:00

Еще раз спасибо очень ценю вашу помощь!

HARLEEN 20.06.2019 02:03

Не беспокойся @ХАРЛИН

EDToaster 20.06.2019 02:04

Другие вопросы по теме