2014-10-19 108 views
-2

我已经学习了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

回答

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++旨在解决的问题之一。例如,如果您运行此代码:

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); 

你会真正得到一个编译时错误抱怨未分配变量的使用。

+0

只是为了澄清,当我学习C++时,当你实例化一个变量,除非你实际初始化它,变量是随机的。例如:{int x}除非我实际初始化x,否则它将是一个随机数。所以用c#,数组不是随机数字? – roadjester 2014-10-19 04:16:04

+0

@roadjester:不。当你在c#中声明一个变量时,它会有一个默认值。例如,对于'int','float'或'double',它将是'0'。对于引用类型,它将是'null'。 – 2014-10-20 01:48:50