2010-03-09 3 views
1

Я пишу карточную игру как способ обучения C#.Проблема с массивом C#

У меня возникла проблема с массивом, выходящим за пределы.

Вот мой код:

namespace Pcardconsole 
{ 
    class Deck 
    { 
     public Deck() 
     { 
      // Assign standard deck to new deck object 
      int j; 
      for (int i = 0; i != CurrentDeck.Length; i++) 
      { 
       CurrentDeck[i] = originalCards[i]; 
      } 
      // Fisher-Yates Shuffling Algorithim 
      Random rnd = new Random(); 

      for (int k = CurrentDeck.Length - 1; k >= 0; k++) 
      { 
       int r = rnd.Next(0, k + 1); 

       int tmp = CurrentDeck[k]; 
       CurrentDeck[k] = CurrentDeck[r]; 
       CurrentDeck[r] = tmp; 
      // Console.WriteLine(i); 
      } 
     } 

     public void Shuffle() 
     { 
      // TODO 
     } 
    // public int[] ReturnCards() 
     // { 
     // TODO 
     // } 

     public int[] originalCards = new int[54] 
     { 
      0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 

      0x1D, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 

      0x2C, 0x2D, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 

      0x3B, 0x3C, 0x3D, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 

      0x4A, 0x4B, 0x4C, 0x4D, 0x50, 0x51 
     }; 

     public int[] CurrentDeck = new int[54]; 

    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Create a Deck object 
      Deck mainDeck = new Deck(); 
      Console.WriteLine("Here is the card array:"); 
      for (int index = 0; index != mainDeck.CurrentDeck.Length; index++) 
      { 
       string card = mainDeck.CurrentDeck[index].ToString("x"); 
       Console.WriteLine("0x" + card); 
      } 
     } 
    } 
} 

Числа шестнадцатеричного стенд для различных карт.

Когда я скомпилирую его, я получаю ошибку индекса массива за пределами ошибки и сбой.

Я не понимаю, что не так.

Любая помощь будет высоко оценена.

ответ

1

Если это не будет

for (int k = CurrentDeck.Length - 1; k >= 0; k--) 

вместо

for (int k = CurrentDeck.Length - 1; k >= 0; k++) 

Также вы можете сохранить свойство длины переменной, а затем проверить по этой переменной.

int currentDeckLength = CurrentDeck.Length; 

for (int k = currentDeckLength - 1; k >= 0; k++) 
+1

Ух ты, ребята, скорей. Большое спасибо. Я получил это с другого сайта, поэтому я думаю, что они не тестировали код. Я попробую сейчас. – Biosci3c

+0

Да! Работает как шарм. Огромное спасибо! – Biosci3c

0

Вы должны сделать ваше сокращение цикла: k-- вместо k++.

Посредством увеличения его вы получаете доступ к индексу, не связанному с индексом, так как вы инициализировали k с максимальным значением для начала. Ваша петля выглядит так, что она настроена на обратный ход, поэтому уменьшайте индекс.

+2

Спасибо, я не могу поверить, как быстро вы, ребята. Вы просто ждете, когда бедные беспомощные программисты просят информацию :) – Biosci3c

0

Вы for (int k = CurrentDeck.Length - 1; k >= 0; k++)

Это должно быть for (int k = CurrentDeck.Length - 1; k >= 0; k--)

Вы видите разницу?

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