2013-03-17 5 views
3

Я пытаюсь перетасовать колоду карт, случайно беря карты с одной колоды и помещая их в другую, чтобы избежать дублирования карт после их добавления в новый список они удаляются из исходного списка, что, по-видимому, вызывает ошибку вне диапазона, несмотря на мои усилия по деинкреации диапазона случайного числа. Предложения, пожалуйста?Аргумент за пределами допустимого диапазона - Карточка Shuffle

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

+0

Кроме того, вы пробовали этот oneliner 'List shuffledDeck = myDeck.Orderby (_ => rNumber.Next()). ToList();'? SO полна ответов такого типа. – I4V

ответ

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) –

+0

Это говорит, что он недоступен из-за его уровня защиты? –

+1

Count - это свойство, поэтому удалите() –

Смежные вопросы