我正在嘗試在卡牌清單上做Fisher Yates隨機卡牌。我已經沖刷論壇和費舍爾耶茨的唯一實現與正常人一樣INT陣列下面Fisher Yates隨機卡牌清單
for (int i = length - 1; i > 0; i--)
{
int j = random.Next(i + 1);
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
這是合理的就好了,我的問題是我實在不明白如何在邏輯轉換的方式我有東西,任何幫助完成此將不勝感激。相關代碼如下:
public struct Card : IComparable<Card>
{
public Rank Rank { get; private set; }
public Suit Suit { get; private set; }
public Card(Rank rank, Suit suit) : this()
{
Rank = rank;
Suit = suit;
}
public override string ToString()
{
return string.Format("{0:x} {1}", (char) Suit, Rank);
}
}
public enum Suit { Spades = 9824, Clubs = 9827, Hearts = 9829, Diamonds = 9830 }
public enum Rank { Ace, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King }
public class Deck
{
public List<Card> Cards { get; private set; }
public Deck()
{
foreach (Rank rank in Enum.GetValues(typeof(Rank)))
{
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
Card card = new Card(rank, suit);
Cards.Add(card);
}
}
}
public Deck(List<Card> cardDeck)
{
Cards = cardDeck;
}
public void Shuffle()
{ //???? I don't know how I would apply the Fisher Yates logic to here
//since all other programs just use normal int arrays
. . .
感謝您的任何和所有幫助。
你的代碼有幾個編程錯誤,你永遠不會初始化'Cards',也不會執行'IComparable' –
Lukazoid
2014-09-19 22:44:46
我只是在Shuffle問題上發佈了相關的代碼,這兩個代碼都在其他地方討論過。 – user3066571 2014-09-19 22:53:02