/ / IndexOutOfRangeException lors de l'utilisation de StringBuilder dans des boucles imbriquées pour c # - c #, constructeur de chaînes, indexoutofrangeexception, parallel.for

IndexOutOfRangeException lors de l'utilisation de StringBuilder dans des boucles imbriquées pour c # - c #, constructeur de chaînes, indexoutofrangeexception, parallel.for

  1. Obtenir une exception à la ligne convertedMatrix[temp] = matrix[i,j];
  2. Erreur exacte:

    IndexOutOfRangeException: l'index de tableau est hors limites. System.Text.StringBuilder.set_Chars (index Int32, valeur Char) (à /System.Text/StringBuilder.cs:line nombre

  3. Voici le code (en C #):

    public const int size = 4;
    public System.Text.StringBuilder convertedMatrix = new System.Text.StringBuilder(size * size);
    public char[,] matrix = new char[,]{"i","s","e","m","r","v","u","n","t","o","d","a"};
    
    public void Generate() {
    for(int i = 0; i < size; i++) {
    convertedMatrix.Append(" ");
    }
    
    int temp = 0;
    
    for(int i = 0; i < size; i++) {
    for(int j = 0; j < size; j++) {
    convertedMatrix[temp] = matrix[i,j];
    temp += 1;
    }
    }
    }
    

Réponses:

2 pour la réponse № 1

le convertedMatrix a i personnages. Dans la ligne, vous obtenez l'erreur, temp peut aller jusqu'à (i-1) * (j-1), ce qui est supérieur à i.

Vous voulez probablement augmenter le nombre de caractères dans convertedMatrix.


0 pour la réponse № 2

Désolé les gars l'ont débogué. Comme @yper l'a dit, convertMatrix avait moins de caractères. Donc l'erreur était à la ligne:

for(int i = 0; i < size; i++) {
wordsLength[i] = 0;
convertedMatrix.Append(" ");
}

Au lieu de cela, il devrait être:

for(int i = 0; i < size * size; i++) {
wordsLength[i] = 0;
convertedMatrix.Append(" ");
}

Merci les gars!