使用类中的函数填充矩阵(2D阵列)
我已经学习了C++,并且正在使用C#。为了澄清,我提供了所有的说明,但如果我能得到(b)和(c)部分的帮助,我想我可以完成其余的工作。使用类中的函数填充矩阵(2D阵列)
这是我的任务: 矩阵是行大小为r,列大小为c的二维数组。有添加或减少矩阵A和B(具有相同行大小m和列大小n)的特定规则。矩阵A的维数m乘n(m是行大小或行维数,n是列维数),而另一个维数为p的矩阵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
首先 - 你不需要一个循环来初始化你的矩阵。只要声明一个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++旨在解决的问题之一。例如,如果您运行此代码:
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);
你会真正得到一个编译时错误抱怨未分配变量的使用。
只是为了澄清,当我学习C++时,当你实例化一个变量,除非你实际初始化它,变量是随机的。例如:{int x}除非我实际初始化x,否则它将是一个随机数。所以用c#,数组不是随机数字? – roadjester 2014-10-19 04:16:04
@roadjester:不。当你在c#中声明一个变量时,它会有一个默认值。例如,对于'int','float'或'double',它将是'0'。对于引用类型,它将是'null'。 – 2014-10-20 01:48:50