我正在使用String比较方法“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方法到底做了什么?
对于玩家来说,它正在比较玩牌中的两张牌 - >遵循程序逻辑。
我可以使用compareTo方法比较卡片吗?
以下是我如何设置类构造函数。
再次,完成。 我在理解compareTo方法的工作原理时遇到了问题。 如果有什么东西像是另一种比较玩家牌的方式的建议。
卡片列表来自2个单独的类别 - >适合和排名
private Rank rCard;
private Suit sCard;
/ ** * ** * ** * ** * ** < EM> * ** * ** * ** * ** *初始化类卡外的对象 * @param rCard * @param sCard * 的 * ** * ** * ** * ** * ** * ** * ** * ** * * / 公共卡(Rank rCard,Suit sCard) { this.rCard = rCard; this.sCard = sCard; }
答案 0 :(得分:1)
首先,compareTo()
方法的目的是定义使两个对象具有可比性的原因。并非所有对象都具有可比性Java API使一些对象具有可比性。例如,String
具有可比性。因此,如果您使用Collections.sort(someStringArray)
之类的方法,则可以完成此任务,因为对象具有可比性。另一方面,如果您想sort()
Card
个Card
个对象,则只有在compareTo()
个对象可比较之后才能完成。您可以使用Card
方法执行此操作。您还希望将implements Comparable
类定义为compareTo()
接口,您必须在其中@Override Cards
方法。这将使您的compareTo()
按排名进行比较,如果您决定按照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()
。我不知道这是否能完全解决您的问题,因为我没有完整的代码,但我希望这可以让您更好地理解{{1}}方法的工作原理。