我试图根据他们的等级和套装对扑克进行排序,但它仍然没有完全排序,这里是代码,注意西装是排序的,但不是排名
排序之前我的手:
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;
答案 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;
}
}
}