2017-04-10 1 views
1

J'utilise une fonction InitializeLetters pour préparer les lettres pour le début du jeu de frappe. Il est supposé préparer 5 lettres aléatoires dans un tableau de type byte [], et après cela, passer les valeurs dans un tableau de type char []. Bien que ce type de mise en œuvre fonctionne, il donne souvent un tableau hors limites d'erreur. Voici la fonction elle-même et l'endroit où elle est utilisée. Des idées sur cette erreur ou comment puis-je le réparer? Augmenter la taille de buff [5] ne résout pas le problème.Index hors limites pour random.NextBytes

private static void InitializeLetters(char[] chars) 
     { 
      byte[] buff = new byte[5]; 
      Random rand = new Random(); 
      rand.NextBytes(buff); 
      string charspallete = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
      for (int i = 0; i < 5; i++) 
      { 
       chars[i] = charspallete[buff[i] % 26 + 1]; 
      } 
     } 

Et la fonction est appelée au démarrage du bouton.

private void labelStart_Click(object sender, EventArgs e) 
     { 
      if (state == 0) 
      { 
       state = 1; 
       labelStart.Text = "Stop"; 
       tmrMoving.Enabled = true; 
       char[] chars = new char[5]; 
       InitializeLetters(chars); 
       c1 = chars[0]; 
       c2 = chars[1]; 
       c3 = chars[2]; 
       c4 = chars[3]; 
       c5 = chars[4]; 
       labelPause.Show(); 
      } 
} 

Répondre

0

Au lieu de

caractère [i] = charspallete [chamois [i]% 26 + 1];

mettre cette

caractère [i] = charspallete [chamois [i]% 26];