首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java对象比较:为扑克游戏实现一个` `compareTo()`方法

Java对象比较:为扑克游戏实现一个` `compareTo()`方法
EN

Stack Overflow用户
提问于 2013-10-13 10:43:40
回答 1查看 2.3K关注 0票数 1

我正在创建一个使用字符串比较方法"compareTo“的方法。然而,我有几个关于它的确切工作原理的问题。

代码语言:javascript
复制
 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方法中的代码部分。**我可以提一下,我已经收到了相当多关于这段代码的在线帮助。当它被解释给我时,它是有意义的。因此,如果这对我有意义,我应该能够用另一种格式重写这段代码。然而,我发现自己无法做到这一点。因此,我正在寻求建议和帮助。

函数

代码语言:javascript
复制
int turn = this.getRank().compareTo(player2.getRank());

通常就是让我失望的原因。compareTo方法到底在做什么?

对于玩家回合,它是在play ->中按照程序逻辑比较两张牌。

是否可以使用compareTo方法将卡与out进行比较?

下面是我设置类构造函数的方法。

再说一次,最后一次。我在理解compareTo方法是如何工作的时候遇到了问题。如果有什么不同的话,我想用另一种方法来比较玩家的牌。

卡片列表来自两个独立的类别-> Suit Rank

代码语言:javascript
复制
private Rank rCard;
  private Suit sCard;

/** ************************ *初始化对象的类外卡片* @param rCard * @param sCard * ************************* */公共卡(等级rCard,Suit sCard) { this.rCard = rCard;this.sCard = sCard;}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-13 11:43:53

首先,compareTo()方法的目的是定义是什么使两个对象具有可比性。并不是所有的对象都是可比较的。Java API使某些对象具有可比性。例如,String具有可比性。因此,如果您使用诸如Collections.sort(someStringArray)之类的方法,则可以完成此任务,因为对象是可比较的。另一方面,如果您想要对Card对象的数组执行sort()操作,那么只有在您使Card对象具有可比性之后,才能完成此操作。您可以使用compareTo()方法来完成此操作。您还希望将Card类定义为implements Comparable接口,在该接口中,您必须@覆盖compareTo()方法。如果您决定在compareTo()中按排名比较它们,这将使您的Cards按排名进行比较。

我相信你想要的是按等级比较这两个对象。

代码语言:javascript
复制
int turn = this.getRank().compareTo(player2.getRank());

is generally what throws me off. What exactly is the compareTo method doing?

你在比较this的排名,我假设它是Player1player2的排名。使用compareTo()方法时,会返回一个int。这个int告诉你哪个玩家的排名更高。1的意思是,player1的排名更高,-1的意思是player2的排名更高,0的意思是排名相等。我假设这个int将决定轮到谁

另外,我相信:

代码语言:javascript
复制
int turn = this.getRank().compareTo(player2.getRank());

应放在compareTo()方法的外部,并应更改为:

代码语言:javascript
复制
int turn = this.compareTo(player2);

您已经根据球员在compareTo()中的排名对他们进行了比较,因此不需要使用getRank()。我不知道这是否能完全解决您的问题,因为我没有您的完整代码,但我希望这能让您更好地理解compareTo()方法是如何工作的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19341308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档