2010-03-09 4 views
1

J'écris un programme de lecture de cartes pour apprendre le C#.Problème avec le tableau C#

J'ai rencontré un problème avec un tableau sortant des limites.

Voici mon code:

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); 
      } 
     } 
    } 
} 

Les numéros hexadécimaux représentent des cartes différentes.

Lorsque je le compile, j'obtiens un index de tableau hors limites et un crash.

Je ne comprends pas ce qui ne va pas.

Toute aide serait grandement appréciée.

Répondre

1

Si pas être

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

au lieu de

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

vous pouvez également enregistrer la propriété de longueur à une variable, puis vérifiez contre cette variable.

int currentDeckLength = CurrentDeck.Length; 

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

Wow, vous êtes rapide. Merci beaucoup. J'ai récupéré ça sur un autre site, donc je pense qu'ils n'ont pas testé le code. Je vais l'essayer maintenant. – Biosci3c

+0

Oui! Fonctionne comme un charme. Merci beaucoup! – Biosci3c

0

Vous devez faire votre diminution de la boucle: k-- au lieu de k++. En l'incrémentant, vous accédez à un index hors limite puisque vous avez initialisé k au nombre maximal pour commencer. Votre boucle semble être configurée pour reboucler, donc décrémentez l'index.

+2

Merci, je ne peux pas croire à quelle vitesse vous êtes les gars. Est-ce que vous attendez juste pour les pauvres programmeurs impuissants de demander des informations :) – Biosci3c

0

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

Il devrait être for (int k = CurrentDeck.Length - 1; k >= 0; k--)

Voyez-vous la différence?