我已经学习了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
答案 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);
实际上,您会收到一个编译时错误,抱怨使用了未分配的变量。