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

时间:2013-10-13 02:43:40

标签: java comparison object-comparison

我正在使用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;       }

1 个答案:

答案 0 :(得分:1)

首先,compareTo()方法的目的是定义使两个对象具有可比性的原因。并非所有对象都具有可比性Java API使一些对象具有可比性。例如,String具有可比性。因此,如果您使用Collections.sort(someStringArray)之类的方法,则可以完成此任务,因为对象具有可比性。另一方面,如果您想sort() CardCard个对象,则只有在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}}方法的工作原理。