1

我正在使用字符串比较方法“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 之外的对象 * @param rCard * @param sCard * * ** * ** * ** * ** * ** * ** * ** * ** * */ public Card(Rank rCard, Suit sCard) { this.rCard = rCard; 这个.sCard = sCard; }

4

1 回答 1

1

首先,该compareTo()方法的目的是定义使两个对象具有可比性的原因。并非所有对象都具有可比性。Java API 使某些对象具有可比性。例如,String具有可比性。因此,如果您要使用诸如 之类的方法Collections.sort(someStringArray),则可以完成此任务,因为对象是可比较的。另一方面,如果您想要sort()一个对象数组,则在使对象具有可比性Card之前无法完成。Card您可以使用该compareTo()方法执行此操作。您还希望将您的Card类定义为implements Comparable接口,您必须在其中 @OverridecompareTo()方法。如果您决定按排名比较它们,这将使您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()方法的工作原理。

于 2013-10-13T03:43:52.587 回答