2

いくつかの単純なforループを使用して、C#で2つの行列を一緒に追加しようとしています。結果をデータグリッドビューに保存します。ただし、最後のセルは追加されていないようです。私はこのコードをしばらく見ていて、理解できないようです。私は何か間違ったことをしましたか?

    // 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];
            }
        }
    }
4

2 に答える 2

2

マトリックスのサイズがまったく同じであると確信していますか?これらの2つの行は、あるマトリックスから行数を取得し、別のマトリックスから列数を取得するため、とにかく奇妙です.

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

あなたのエラーは、MSDNがItemプロパティ([]演算子を使用した配列のようなアクセスに使用される)が次のように述べていることだと思います:

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

ただし、常に逆の順序で使用します(列の前の行)。

于 2009-02-23T00:41:15.237 に答える
1

C# のような言語では、このようなことを気にする必要はありません。そのようなことを行う試行済みのテスト済みのクラスライブラリがあり、重要なことに、それらはプロセッサの SIMD 命令などを利用して最適化されています。言語に演算子のオーバーロードがある場合は、行列を宣言するだけです。オブジェクトとして、それらを単純な結果 = mat_a + mat_b と一緒に追加します。

于 2009-02-23T01:05:08.080 に答える