【问题标题】:Filling in a matrix(2D array) using functions from a class使用类中的函数填充矩阵(二维数组)
【发布时间】:2014-10-19 03:34:51
【问题描述】:

我学过 C++,目前正在学习 C#。澄清一下,我提供了所有说明,但如果我能在 (b) 和 (c) 部分获得帮助,我想我可以完成其余的工作。

这是我的任务: 矩阵是行大小为 r 和列大小为 c 的二维数组。对矩阵 A 和 B(相同的行大小 m 和列大小 n)进行加减运算有特定的规则。维度为 m 的矩阵 A 乘以 n(m 是行大小或行维度,n 是列维度)与维度 p 乘以 q 的另一个矩阵 B 的乘积仅在 p = n 且在这种情况下 AB 是矩阵时才有意义尺寸为 m 乘 q。 (a) 根据行大小、列大小等定义至少具有私有变量的类 Matrix。 (b) 指定行大小和列大小时提供构造函数。您将所有参数设置为 0.0。 (c) 提供设置矩阵条目的方法 (d) 提供矩阵的 Add 方法 (e) 提供减法。 (f) 提供标量乘法,它将矩阵 A 的所有元素乘以值 x。 (g) 提供乘法方法 mul 使得 A.mul(B) 等于 AB 如果 A 的列维度 c 等于 B 的行维度。如果产品 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 只是为了让编译器停止抱怨)。其次,当它建立时,我不确定如何填写数组(很可能来自控制台)。希望我的问题听起来不会太像我要求有人为我做作业。呵呵

【问题讨论】:

    标签: c# matrix multidimensional-array


    【解决方案1】:

    首先 - 您不需要循环来初始化矩阵。只需声明一个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# 旨在解决的 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:不。当您在 c# 中声明变量时,它将具有默认值。例如,intfloatdouble 将是 0。对于引用类型,它将是 null
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 2019-04-28
    • 2017-03-06
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多