gpt4 book ai didi

Java对象比较: implementing a `compareTo()` method for a playing card game

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:52 25 4
gpt4 key购买 nike

我正在使用字符串比较方法“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com