如何编写一个将一个团队与另一个团队进行比较的equals方法?

时间:2014-10-12 20:28:51

标签: java equals tostring

public class Team {

    private String name, sport;
    private int numOfWins, numOfLosses;
    public Team(String name, String Sport){
        this.name= name;
        this.sport= Sport;
        numOfWins= 0;
        numOfLosses= 0;
    }

    public int addAnotherWin(){
        return numOfWins++;
    }

    public int addAnotherLoss(){
        return numOfLosses++;
    }

    public int getNumWins(){
        return numOfWins;
    }

    public int getNumLosses(){
        return numOfLosses;
    }

    public void resetWinsAndLosses(){
        numOfWins= numOfWins*0;
        numOfLosses= numOfLosses*0;
    }

    public double getPercentOfGamesWon(){
        double z= numOfWins/ numOfWins+numOfLosses;
        return z;
    }

    public boolean equals(){    

    }

    public String toString(){

    }
} 

所以我的equals方法假设比较两个团队,如果他们的PercentOfGamesWon彼此相等则返回它们是否相等,但我不知道如何写这个,请问有什么帮助吗?我需要帮助的另一件事是toString,我不确定它的用途和我想写的内容。我刚刚开始编码,如果这是一个菜鸟问题,那就很抱歉。

4 个答案:

答案 0 :(得分:2)

我强烈建议您参考What issues should be considered when overriding equals()

中的答案

首先看看被比较的对象是否实际上是一个团队(使用instanceof),然后比较百分比:

public boolean equal(Object obj) {
     if(!obj instanceof Team) 
          return false;

     return getPercentOfGamesWon() == ((Team) obj).getPercentOfGamesWon();
} 

现在您可以调用一个团队的equals方法并传入另一个团队进行比较:

Team team1 = new Team();
Team team2 = new Team();

boolean equal = team1.equals(team2);

正如问题的评论部分中的@MarsAtomic所提到的,您应该真正实现compareTo(Team)方法。此方法应根据百分比是高,低还是相同来返回一个数字:

class Team implements Comparable<Team> {

     public int compareTo(Team team) {
          int ourPercent = getPercentOfGamesWon();
          int theirPercent = team.getPercentOfGamesWon();

          if(ourPercent > theirPercent)
               return 1;
          else if(ourPercent < theirPercent)
               return -1;
          else
               return 0; //the same
     }
}

答案 1 :(得分:1)

正如@MarsAtomic评论的那样,这更适合比较器,而不是等于。即使巨人队和道奇队队员以同样的战绩结束比赛,我也不认为你会考虑他们等于#34;等等。而你可能希望按表现对球队进行排名。

public static Comparator<Team> BY_PCT = new Comparator<Team>() {
   public int compare(Team t1, Team t2) {
      double winPct1 = t1.getPercentOfGamesWon();
      double winPct2 = t2.getPercentOfGamesWon();
      return Double.compare( winPct1, winPct2);
   }
};

你也可以像Vince的回答一样实施Comparable。

答案 2 :(得分:0)

第一步是确定如何计算百分比。百分比通常写为&#34;值/组合值&#34;。如果你只是返回一个百分比那么这就是你的回答。虽然如果准确性很重要,我建议使用BigDecimal类。

对于toString方法,你基本上可以在这里放任何东西。 ToString()应该为对象提供有意义的文本。这与equals方法有关。在许多对象中,.equals()比较哈希码,即内存中的位置。因此,toString通常会返回许多对象的哈希码。必须使哈希码等于您要比较的值,并且很多次toString只是这些值的字符串表示。在你的情况下,我会返回百分比。

答案 3 :(得分:0)

你可以这样做:

public class Team {

    private String name, sport;
    private int numOfWins, numOfLosses;

    public Team(String name, String Sport) {
        this.name = name;
        this.sport = Sport;
        numOfWins = 0;
        numOfLosses = 0;
    }

    public int addAnotherWin() {
        return numOfWins++;
    }

    public int addAnotherLoss() {
        return numOfLosses++;
    }

    public int getNumWins() {
        return numOfWins;
    }

    public int getNumLosses() {
        return numOfLosses;
    }

    public void resetWinsAndLosses() {
        numOfWins = numOfWins * 0;
        numOfLosses = numOfLosses * 0;
    }

    public Double getPercentOfGamesWon() {
        double z = numOfWins / (numOfWins + numOfLosses);
        return new Double(z);
    }

    @Override
    public boolean equals(Object o) {
        if ( o instanceof Team)
        {
            Team other = (Team)o;
            return this.getPercentOfGamesWon().equals(other.getPercentOfGamesWon());
        }
        return false;
    }

    public static void main(String[] args) {
        Team teamOne = new Team("Falcons", "Football");
        teamOne.addAnotherWin();
        teamOne.addAnotherWin();

        Team teamTwo = new Team("Broncos", "Football");
        teamTwo.addAnotherWin();
        teamTwo.addAnotherWin();

        if( teamOne.equals(teamTwo) )
        {
            System.out.println("Two wins, they are equal");
        }

        teamOne.addAnotherLoss();

        if ( ! teamOne.equals(teamTwo) )
        {
            System.out.println("Two wins, but one loss, they are not equal");
        }


    }

}

我添加了main,以便您可以看到它的实际效果。另一个可能更有用的解决方案可能是实施Comparable,这可以让您了解团队是否小于,等于或大于另一个团队。