Я создаю систему голосования и хочу, чтобы система голосования работала до тех пор, пока пользователь не введет 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 голосами. Помощь будет принята с благодарностью
Я искал в Интернете, но не мог найти много
В вашем методе:
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
.
Также я не могу заставить свою программу зацикливаться даже с помощью while (true)
у вас есть break;
в блоке try. break
немедленно выходит из цикла. Удалите его, и теперь он должен работать
Еще раз спасибо очень ценю вашу помощь!
Не беспокойся @ХАРЛИН
Большое спасибо!