1

当我调用名为 Vyměň 的方法时(它具有矩阵“matice”作为形式参数),但是当方法结束时,实际矩阵“a”(不应更改)a 被覆盖。为什么?

static int[,] Vyměň(int sloupec, int[,] matice, int [] vektor)
    {
        for (int i = 0; i < matice.GetLength(0); i++)
        {
            matice[i, sloupec] = vektor[i];
        }
        return matice;
    }

    static void Main(string[] args)
    {
        int[,] a = new int[3,4];
        int[] b = new int[3];

        a = Čti(); //Method Čti works fine
        for( int i = 0; i <3; i++)
        {
            b[i] = a[i, 3];
        }

        int detA = determinanty.det3(a);
        Vypis(a);
        int detX = determinanty.det3(Vyměň(0, a, b));
        Vypis(a);
        int detY = determinanty.det3(Vyměň(1, a,b));
        Vypis(a);
        int detZ = determinanty.det3(Vyměň(2, a,b));
        Vypis(a);

        double x = detX / detA;
        double y = detY / detA;
        double z = detZ / detA;
        Console.WriteLine("kořen x = {0}", x);
        Console.WriteLine("kořen y = {0}", y);
        Console.WriteLine("kořen z = {0}", z);

    }
}
4

3 回答 3

3

数组在 C# 中通过引用传递,您正在更改方法内矩阵的值。

如果您不想这样做,请使用数组的克隆来传递方法。

于 2013-04-19T05:08:16.220 回答
0

我猜你的形式参数是指值类型。
但由于你使用的是数组(引用类型),它们被作为引用类型传递。

于 2013-04-19T05:09:13.387 回答
0

数组是引用类型 - 因此将这种类型的变量放入方法中不会创建值的副本,而是让方法修改该值。

如果您需要数组/矩阵类型的真正“值”语义,则需要创建自己的类型,强制您创建副本以修改值(类似于string)。

于 2013-04-19T05:09:25.453 回答