2013-03-17 55 views
3

我試圖通過隨機從一個卡組獲取卡並將它們放入其他卡,以避免在將卡添加到新列表時重複卡他們從原始列表中刪除,這似乎導致參數超出範圍錯誤,儘管我努力去遞增隨機數的範圍。請提出建議?參數超出範圍 - 卡洗牌

List<Card> shuffledDeck = new List<Card>(); 

    for (int i = 0; i <= 51; ++i) 
    { 
     int c = myDeck.Count + 1; 
     int n = rNumber.Next (1, c); 
     shuffledDeck.Add(myDeck[n]); 
     myDeck.Remove(myDeck[n]); 
    } 
+2

第一:什麼魔數是51?其次,爲什麼'myDeck.Count + 1'和'rNumber.Next(1,c)'?列表索引基於零,它看起來像你不斷產生「關閉一個」的錯誤。 – Corak 2013-03-17 17:44:46

+0

另外,你試過這個oneliner'List shuffledDeck = myDeck.Orderby(_ => rNumber.Next())。ToList();'? SO充滿了這種類型的答案。 – I4V 2013-03-17 17:51:07

回答

2
List<Card> shuffledDeck = new List<Card>(); 

    while (myDeck.Count > 0) 
    { 
     int c = myDeck.Count; 

     int n = rNumber.Next (0, c); 
     var value = myDeck[n]; 
     shuffledDeck.Add(value); 
     myDeck.Remove(value); 

    } 

你需要確保你沒有超過實際的對象數組數索引的更多。

+0

當我進行更改時,我收到此消息: 錯誤CS1955:成員System.Collections.Generic.List .Count'不能用作方法或委託(CS1955)(BlackJackGameX) – 2013-03-17 17:47:09

+0

它說由於其保護級別而無法訪問? – 2013-03-17 17:48:36

+1

伯爵是一個屬性,所以刪除() – 2013-03-17 17:49:28