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,我不确定它的用途和我想写的内容。我刚刚开始编码,如果这是一个菜鸟问题,那就很抱歉。
答案 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,这可以让您了解团队是否小于,等于或大于另一个团队。