我正在创建一个使用字符串比较方法"compareTo“的方法。然而,我有几个关于它的确切工作原理的问题。
public int compareTo(Card player2){
int finalRank = this.getRank().compareTo(player2.getRank());
int turn = this.getRank().compareTo(player2.getRank());
// Checks for "War" before anything is processed
if(this.getRank() == player2.getRank())
{
return 0; // results in war
}
//This logic sets Ace as the highest card
//after checking for "WAR"
else if(this.getRank() == Rank.ACE)
{
return 1;
}
else if(player2.getRank() == Rank.ACE)
{
return -1;
}
//If it is not an ace, the winner per turn
//is determined by standard value.
else if(turn > 0)
{
//System.out.println("playerOne wins");
return 1;
}
else
{
//System.out.println("playerTwo wins");
return -1;
}
}//end compareTo
这是我在compareTo方法中的代码部分。**我可以提一下,我已经收到了相当多关于这段代码的在线帮助。当它被解释给我时,它是有意义的。因此,如果这对我有意义,我应该能够用另一种格式重写这段代码。然而,我发现自己无法做到这一点。因此,我正在寻求建议和帮助。
函数
int turn = this.getRank().compareTo(player2.getRank());
通常就是让我失望的原因。compareTo方法到底在做什么?
对于玩家回合,它是在play ->中按照程序逻辑比较两张牌。
是否可以使用compareTo方法将卡与out进行比较?
下面是我设置类构造函数的方法。
再说一次,最后一次。我在理解compareTo方法是如何工作的时候遇到了问题。如果有什么不同的话,我想用另一种方法来比较玩家的牌。
卡片列表来自两个独立的类别-> Suit Rank
private Rank rCard;
private Suit sCard;
/** ************************ *初始化对象的类外卡片* @param rCard * @param sCard * ************************* */公共卡(等级rCard,Suit sCard) { this.rCard = rCard;this.sCard = sCard;}
发布于 2013-10-13 03:43:53
首先,compareTo()
方法的目的是定义是什么使两个对象具有可比性。并不是所有的对象都是可比较的。Java API使某些对象具有可比性。例如,String
具有可比性。因此,如果您使用诸如Collections.sort(someStringArray)
之类的方法,则可以完成此任务,因为对象是可比较的。另一方面,如果您想要对Card
对象的数组执行sort()
操作,那么只有在您使Card
对象具有可比性之后,才能完成此操作。您可以使用compareTo()
方法来完成此操作。您还希望将Card
类定义为implements Comparable
接口,在该接口中,您必须@覆盖compareTo()
方法。如果您决定在compareTo()
中按排名比较它们,这将使您的Cards
按排名进行比较。
我相信你想要的是按等级比较这两个对象。
int turn = this.getRank().compareTo(player2.getRank());
is generally what throws me off. What exactly is the compareTo method doing?
你在比较this
的排名,我假设它是Player1
和player2
的排名。使用compareTo()
方法时,会返回一个int
。这个int
告诉你哪个玩家的排名更高。1
的意思是,player1
的排名更高,-1
的意思是player2
的排名更高,0
的意思是排名相等。我假设这个int
将决定轮到谁
另外,我相信:
int turn = this.getRank().compareTo(player2.getRank());
应放在compareTo()
方法的外部,并应更改为:
int turn = this.compareTo(player2);
您已经根据球员在compareTo()
中的排名对他们进行了比较,因此不需要使用getRank()
。我不知道这是否能完全解决您的问题,因为我没有您的完整代码,但我希望这能让您更好地理解compareTo()
方法是如何工作的。
https://stackoverflow.com/questions/19341308
复制