- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用字符串比较方法“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;
/** ************************ * 初始化Card类之外的对象 * @参数rCard * @参数sCard * ************************* */ 公共(public)卡(等级卡、花色卡) { this.rCard = rCard; this.sCard = sCard; }
最佳答案
首先,compareTo()
方法的目的是定义使两个对象具有可比性的因素。并非所有对象都具有可比性。某些对象可以通过 Java API 进行比较。例如,String
是可比较的。因此,如果您要使用诸如Collections.sort(someStringArray)
之类的方法,则可以完成此任务,因为对象是可比较的。另一方面,如果您想要对 Card
对象的数组进行 sort()
,则只有使 Card
对象具有可比性才能完成。您可以使用 compareTo()
方法来完成此操作。您还希望将您的 Card
类定义为 implements Comparable
接口(interface),其中您必须@Override 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()
方法的工作原理。
关于Java对象比较: implementing a `compareTo()` method for a playing card game,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341308/
我是一名优秀的程序员,十分优秀!