如何改进此任务的代码

时间:2016-10-21 10:22:08

标签: java

我是面向对象编程的新手,并尝试构建类似于基本投票计数器的东西,该计数器应该采用 int 参数来表示两个候选者的选择并将选举结果打印到终端窗口。虽然(每位候选人的投票和投票总票数)

我正在寻找的方法也应该返回一个字符串,提供有关投票成功或失败的信息。“你的投票已被投票”“无效选择,没有投票"

我已经创建了一个类和构造函数,并且还实现了一些基本的get方法。

我想知道如何通过条件声明或使用某种先进的方法来实现这一目标。

在语法或更广泛的方法方面的任何帮助将不胜感激。

public class VoteCounter {
    private String candidate1;
    private String candidate2;
    private int candidate1Votes;
    private int candidate2Votes;
    private boolean completed;

    public VoteCounter(String candidate1, String candidate2) {
        this.candidate1 = candidate1;
        this.candidate2 = candidate2;
        this.candidate1Votes = 0;
        this.candidate2Votes = 0;
        this.completed = false;
    }

    public VoteCounter() {
        this("CANDIDATE 1", "CANDIDATE 2");
     }


     public String getCandidate1 () {
         return this.candidate1; 
     }


     public String getCandidate2 () {
         return this.candidate2; 
     }


     public Boolean getCompleted () {
         return this.completed; 
     }


     public void setCompleted (boolean completed) {
         this.completed = completed;
     }
}      

2 个答案:

答案 0 :(得分:1)

这样的东西?

private String vote(int choice)
{
  if(choice == 1)
  {
    candidate1Votes++;
  }
  else if(choice == 2)
  {
    candidate2Votes++;
  }
  else
  {
    return "invalid choice, no vote cast";
  }
  return "your vote has been cast";
}

答案 1 :(得分:1)

我会以更一般的方式做到这一点,避免代码重复并允许轻松更改候选人数量。 所以让我们做一个类似于你的VoteCounter的类投票,但只针对一个候选人,有以下字段:

private String candidate;  // init this in constructor
private int candidateVotes;  // initially 0, so no need to init

并且使用投票()方法,如在其他答案中,但也没有candiadate,所以:

public void vote() {
  candidateVotes++;
}

然后你可以制作VoteCounter类,它将接收任意数量的候选者,并将它们保存在数组或地图中。

Map<Integer, Vote> votes = new HashMap<>();

然后你选择创建投票方法:

public void vote(int choice) {
    votes.get(choice).vote();
}

然后剩下的就是遍历你的投票地图并找到票数最多的那个。