2009-02-23 4 views
2

J'essaie d'ajouter deux matrices ensemble en C# en utilisant des boucles simples pour les boucles. Je stocke les résultats dans une vue de grille de données. Cependant, la dernière cellule ne semble pas ajouter. Je regarde ce code depuis un moment maintenant et n'arrive pas à le comprendre. Est-ce que j'ai fait quelque chose de mal?Ajout de matrices en C#?

// Adds two matrices together using arrays. 
    private void menuItemAdd_Click(object sender, EventArgs e) 
    { 
     // Create two 2-D arrays 
     int[,] matrixOne = new int[dgvMatrixOne.RowCount, dgvMatrixOne.ColumnCount]; 
     int[,] matrixTwo = new int[dgvMatrixTwo.RowCount, dgvMatrixTwo.ColumnCount]; 

     // The rows of the total matrix match the rows of the first matrix. 
     dgvMatrixTotal.RowCount = dgvMatrixOne.RowCount; 

     // The columns of the total matrix match the columns of the first matrix. 
     dgvMatrixTotal.ColumnCount = dgvMatrixOne.ColumnCount; 

     // Fill matrix one with the data in the data grid matrix one. 
     for (int i = 0; i < dgvMatrixOne.RowCount; i++) 
     { 
      for (int j = 0; j < dgvMatrixOne.ColumnCount; j++) 
      { 
       matrixOne[i, j] = Convert.ToInt32(dgvMatrixOne[i, j].Value); 
      } 
     } 

     // Fill matrix two with the data in the data grid matrix two. 
     for (int i = 0; i < dgvMatrixTwo.RowCount; i++) 
     { 
      for (int j = 0; j < dgvMatrixTwo.ColumnCount; j++) 
      { 
       matrixTwo[i, j] = Convert.ToInt32(dgvMatrixTwo[i, j].Value); 
      } 
     } 

     // Set the total data grid to matrix one + matrix two. 
     for (int i = 0; i < dgvMatrixOne.RowCount; i++) 
     { 
      for (int j = 0; j < dgvMatrixOne.ColumnCount; j++) 
      { 
       dgvMatrixTotal[i, j].Value = matrixOne[i, j] + matrixTwo[i, j]; 
      } 
     } 
    } 

Répondre

2

Etes-vous sûr que votre matrice ont exactement la même taille, thèses deux lignes sont étranges quand même parce que vous prenez le nombre de lignes d'une matrice, mais la columnCount d'un autre.

dgvMatrixTotal.RowCount = dgvMatrixOne.RowCount; 
dgvMatrixTotal.ColumnCount = dgvMatrixTwo.ColumnCount; 

Je crois que votre erreur est cet état MSDN que la propriété Item (utilisé pour l'accès semblable à un tableau avec l'opérateur []) est:

public DataGridViewCell this [ 
    int columnIndex, 
    int rowIndex 
] { get; set; } 

Mais vous utilisez AllWays il dans l'ordre inverse (ligne avant colonne).

+0

Désolé, je vais corriger cela, il s'avère que c'est ainsi que vous déterminez la taille d'une matrice lors de la multiplication des matrices – Kredns

+0

Aussi, rappelez-vous que .RowCount sera éteint par un quand .AllowUserToAddRows == vrai –

+0

Je l'avais déjà défini sur false car il ajoutait automatiquement des lignes et créait une situation difficile. – Kredns

1

Dans une langue comme C#, vous n'avez pas vraiment besoin de vous inquiéter de ce genre de choses. Il existe des bibliothèques de classes éprouvées qui font ce genre de choses pour vous, et surtout, elles sont optimisées et tirent parti des instructions SIMD de vos processeurs, etc. Si la langue est surchargée, il vous suffit de déclarer vos matrices en tant qu'objets, et ajoutez-les avec un résultat simple = mat_a + mat_b.

+0

Je suis désolé de ne pas avoir précisé cela dans la question, mais j'essaie de réinventer la roue pour en savoir plus sur les roues. Je sais qu'il existe des bibliothèques gratuites, mais je pensais que ce serait un bon projet de passe-temps. – Kredns

Questions connexes