2016-09-16 1 views
-1

Le morceau de code suivant génère une exception IndexOutOfRangeException non gérée, mais je ne sais pas pourquoi. Le a for-loop est défini pour être plus petit que le i for-loop car le tableau de tableaux est 3x2. J'ai essayé de proie le i et un mais sans chance. Pouvez-vous voir l'erreur?Erreur IndexOutOfRangeException en C# après la création d'une double boucle

namespace text_test 
{ 
class txt_program 
{ 
    //() You don't use "args" in the method 
    public void txt() 
    { 
     int[][] names = { new int[] { 2, 3, 4}, new int[] { 5, 6, 7} }; 


     using (StreamWriter SW = new StreamWriter(@"txt.txt")) 
     { 
      for (int i = 0; i < 4; i++) 
      { 
       for (int a = 0; a < 3; a++) 
       { 
        SW.Write(" " + names[i][a]); 
       } 
       SW.WriteLine(names); 
      } 
     } 
    } 
} 
} 

Le résultat attendu serait un fichier txt:

2 3 4 
5 6 7 
+0

'for (int i = 0; i <4; i ++)' - 'i' va de 0 à 3, array est de 0 à 2. Mais voici un conseil: Si vous avez des problèmes comme est, exécutez-le sous le débogueur et voir où il se brise. –

Répondre

0
boucle

A répété 4 fois au lieu de 2 fois

Au lieu d'utiliser les nombres magiques utilisent GetLength()

for (int i = 0; i < names.GetLength(0); i++) 
       { 
        for (int a = 0; a < names.GetLength(1); a++) 
        { 
         SW.Write(" " + names[i][a]); 
        } 
        SW.WriteLine(names); 
       } 
+0

Vous pouvez toujours utiliser les propriétés Length/Count pour vous assurer que vos boucles ne dépassent pas les limites de la plage. –

+0

BOOM! lol. Les grands esprits se ressemblent, @CodeJoy! –