Java:比较甲板上创建的两张牌

时间:2016-03-01 01:40:22

标签: java comparison

所以我有一个卡片类,套牌类和游戏类。除了我试图将计算机生成的随机卡与玩家选择的卡片进行比较外,我已经掌握了所有内容。

这是我的String数组卡:

String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10",
                            "Jack", "Queen", "King"};

这是我的compareTo方法,我从Comparable实现了将生成的卡与玩家选择的卡进行比较,并返回两者中的较高者:

    public int compareTo(Card crd)
{
    Card card1;
    int card1Suit = (int) (Math.random() * 4);
    int card1Rank = (int) (Math.random() * 13);
    card1 = new Card(a,b);
    if(card1.getRank().charAt(0) < crd.getRank().charAt(0))
    {
        return 0;
    }

    return 1;
}

据我所知,只是比较String数组元素的第一个字符是不正确的,但我不知道如何使用正确的比较来返回更高的卡。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我宁愿将enum用于排名和套装。您可以直接将枚举值相互比较,以便与equals方法相等。您可以使用枚举文字的枚举顺序为排名提供自然排序,或者通过枚举值的自定义构造函数明确指定排名值

答案 1 :(得分:0)

在此方法中删除Card card1;变量。它不仅不需要,它是危险的,并且冒着抛出NullPointerException的风险。而是使用当前实例中调用此方法的字段this

要确定排名,您需要使用for循环遍历数组,然后确定当前卡的字段相对于参数Card的字段的位置,然后返回相应的数字。