排序扑克之手

时间:2015-03-17 18:33:28

标签: java

我试图根据他们的等级和套装对扑克进行排序,但它仍然没有完全排序,这里是代码,注意西装是排序的,但不是排名

排序之前我的手:

1:心灵之王 2:钻石的四个 3:CLUBS的七分之一 4:CLUBS之王 5:三个心 6:五个钻石 7:两个CLUBS 8:DIAMONDS之王 9:四个SPADES 10:三个DIAMONDS

排序后:

1:SPADES的四个 2:心灵之王 3:三个心 4:两个CLUBS 5:CLUBS之王 6:CLUBS的七分之一 7:DIAMONDS的王者 8:五个钻石 9:钻石的四个 10:三个DIAMONDS

卡片对象

public int compareTo(Card that)
{
    if(this.suit.ordinal() > that.suit.ordinal())
    {
        return 1;
    }
    if(this.suit.ordinal() < that.suit.ordinal()) 
    {
        return -1;
    }       

    int rank1 = (this.rank.ordinal() + 11) % 13; //A>K
    int rank2 = (that.rank.ordinal() + 11) % 13;

    if(rank1 > rank2) return 1;
    if(rank1 < rank2) return -1;
    return 0;
}

玩家对象

public void tryTest()
{
    Card temp = new Card();
    for(int i=0;i<countCard;i++)
    {
        for(int j=0;j<countCard;j++)
        {
            if(playerHand[i].compareTo(playerHand[j]) > 0)
            {
                temp=this.playerHand[j];
                this.playerHand[j] = this.playerHand[i];
                this.playerHand[i] = temp;
            }
        }
    }
}

Enum Ranks

ACE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING;

Enum Suits

DIAMONDS,
CLUBS,
HEARTS,
SPADES;

1 个答案:

答案 0 :(得分:0)

查看一些标准sorting algorithms。您现在拥有的代码将所有内容与其他所有内容进行比较,然后在一个大于另一个的情况下交换它们。然而,这可能会导致您向后交换:

1,2

2> 1因此交换

2,1

与您所拥有的最接近的算法是冒泡排序,它使用稍微不同的索引:

for(int i=0;i<countCard;i++)
{
    for(int j=0;j<countCard -1;j++)
    {
        if(playerHand[j].compareTo(playerHand[j+1]) > 0)
        {
            temp=this.playerHand[j+1];
            this.playerHand[j+1]= this.playerHand[j];
            this.playerHand[j] = temp;
        }
    }
}