2013-09-09 5 views
-3

Когда я создаю объект типа Deck, исключение показано: «IndexOutOfRangeException был необработанным»Создание массива объекта в цикле в C#?

Может кто-нибудь объяснить, почему?

public class Deck { 
    Card[] card = new Card[52]; 
    const int NumOfCards = 52; 

    public Deck() 
    { 
     string[] symbol = { "Diamonds", "Clubs", "Hearts", "Spades"}; 
     string[] rank = { "Ace", "Two", "Three", "Four", "Five", "Six", 
          "Seven", "Eight", "Nine", "Jack", "Queen", "King"}; 

     for (int i = 0; i < card.Length; ++i) 
     { 
      /// this is the line with problem shown in debug     
      card[i] = new Card(symbol[i/13], rank[i % 13]); 
     }  
     Console.WriteLine(card.Length); 
    } 

    public void PrintDeck() { 
     foreach (Card c in card) 
      Console.WriteLine(c); 
    } 
} 
+3

Проверьте 'я% 13' значение, то подсчет элементов в' rank', а затем посмотреть на '«Ten»' – zerkms

+0

Пфф Zerk, я чувствую себя плохо для размещения как ответьте сейчас :) – Rawling

+1

@Rawling: поместите http://en.wikipedia.org/wiki/Off-by-one_error там, и все будет хорошо :-) – zerkms

ответ

-1

Ошибка в строке

card[i] = new Card(symbol[i/13], rank[i % 13]); 

В предложении

rank[i % 13] 

когда i равно 12, мы получили 12% 13 = 12, а затем rank[12] массив положение, которое не существует. Чтобы решить эту проблему, измените rank[i % 13] по rank[i % 12]

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