使用类中的函数填充矩阵(2D数组)

时间:2014-10-19 03:34:51

标签: c# matrix multidimensional-array

我已经学习了C ++,目前正在学习C#。只是为了澄清,我提供了所有的指示,但如果我能得到部分(b)和(c)的帮助,我想我可以做其余的事。

这是我的任务: Matrix是行大小r和列大小c的二维数组。存在添加或减去矩阵A和B(具有相同行大小m和列大小n)的特定规则。维数m乘以n的矩阵A的乘积(m是行大小或行维度,n是列维度),另一个维度p乘q的矩阵B仅在p = n时才有意义,在这种情况下AB是矩阵尺寸m乘q。 (a)根据行大小,列大小等定义具有至少私有变量的类Matrix。 (b)在指定行大小和列大小时提供构造函数。您将所有参数设置为0.0。 (c)提供设置矩阵条目的方法 (d)提供矩阵的加法 (e)提供减法方法。 (f)提供标量乘法,它将矩阵A的所有元素乘以值x。 (g)提供乘法方法mul,使得如果A的列维度c等于B的行维度,则A.mul(B)等于AB。如果产品AB无意义,则生成错误消息。

{
 {
        private int r=10;//row size
        private int c=10;//column size

        int[,] array=new int [10,10];

        public Matrix()
        {
            for (int i = 0; i < this.r; i++)
            {
                for (int j = 0; j < this.c; j++)
                {

                }
            }
        }
        public Matrix(int rowSize, int columnSize)
        {
            this.r = rowSize;
            this.c = columnSize;
        }
        public void SetMatrix()
        {
            for (int i=0; i<this.r; i++)
            {
                for(int j=0; j<this.c; j++)
                {

                }
            }
        }
    }
}

如果没有有限的大小,我不知道如何继续创建数组(10,10只是因此编译器会停止抱怨)。其次,当它建立时,我不确定如何填充阵列(最有可能来自控制台)。希望我的问题听起来不像我要求别人为我做功课。 XD

1 个答案:

答案 0 :(得分:0)

首先 - 您不需要循环来初始化矩阵。只声明int[r,c]将为您提供一个填充零的二维数组。你的描述并没有说零参数构造函数是必需的,所以我不会提供一个,它还不清楚它应该如何表现。所以只需创建一个这样的构造函数:

public Matrix(int rows, int cols)
{
    r = rows;
    c = cols;
    array = new int[r,c];   // Note: this will be filled with zeros!
}

对于设置条目,您只需提供如下方法:

public void SetCell(int row, int col, int val) 
{
    array[row,col] = val;
}

或者您甚至可以使用索引器执行此类操作:

public int this[int row, int col]
{
    get { return array[row,col]; }
    set { array[row,col] = value; }  // You didn't ask for a setter, but I assume you'll need one
}
  

如果我能得到部分(b)和(c)的帮助,我想我可以做其余的事。

好的,祝你好运

编辑:

所以要澄清一下,当你声明一个int数组时,它最初会用零填充。这与c ++形成对比,在c ++中,它将是一个随机的内存块,将填充随机垃圾,你需要设置为零。未分配变量的使用是&#34;问题之一&#34;使用c#c#旨在修复。例如,如果您运行此代码:

    int[] arr = new int[10];
    Console.WriteLine(string.Join(",",arr));

每次都会写0,0,0,0,0,0,0,0,0,0

有关详细信息,请阅读here。特别是这部分:

  

注意如果在声明时未初始化数组,则会自动将数组成员初始化为数组类型的默认初始值。此外,如果将数组声明为类型的字段,则在实例化类型时,它将设置为默认值null。

但请注意,如果你这样做:

int a;
Console.WriteLine(a);

实际上,您会收到一个编译时错误,抱怨使用了未分配的变量。