我的C#程序有问题。我想将一些值分配给3 * 3矩阵,这是我C#代码中的二维列表。这是我的代码的一部分:
List<double> coefs = new List<double>();
List<List<double>> a = new List<List<double>>();
List<double> b = new List<double>();
List<double> u3 = new List<double>();
List<double> x2 = new List<double>();
List<double> x3 = new List<double>();
List<double> x4 = new List<double>();
List<double> xy = new List<double>();
List<double> x2y = new List<double>();
for (int i=0;i<3;++i)
u3.add(0);
for (int i = 0; i < 3; ++i)
{
a.Add(u3);
b.Add(0);
}
for (int i = 0; i < n; ++i)
{
x2.Add(Math.Pow(x[i], 2));
x3.Add(Math.Pow(x[i], 3));
x4.Add(Math.Pow(x[i], 4));
xy.Add(x[i] * y[i]);
x2y.Add(Math.Pow(x[i], 2) * y[i]);
}
a[0][0] = n;
a[0][1] = sum(x, n);
a[0][2] = sum(x2, n);
a[1][0] = a[0][1];
a[1][1] = a[0][2];
a[1][2] = sum(x3, n);
a[2][0] = a[0][2];
a[2][1] = a[1][2];
a[2][2] = sum(x4, n);
b[0] = sum(y, n);
b[1] = sum(xy, n);
b[2] = sum(x2y, n);
x和y是数据列表。在我的代码结束时,我计算并分配[0] [0],[0] [1]和[0] [2]。但是当程序到达[1] [0],[1] [1]和[1] [2]以及......时,吃下一个命令,包括[0] [0]的旧值,a [0] [1]和[0] [2]自动变化。有什么问题,我该如何解决?
谢谢。
答案 0 :(得分:3)
问题是这个
List<double> u3 = new List<double>();
for (int i=0;i<3;++i)
u3.add(0);
for (int i = 0; i < 3; ++i)
{
a.Add(u3);
b.Add(0);
}
您要添加u3
3次。这意味着a[0]
,a[1]
,a[2]
都指向同一个列表。如果您修改a[0]
,则对a[1]
和a[2]
进行了相同的更改。
您需要为每个元素创建一个新列表
for (int i = 0; i < 3; ++i)
{
List<double> u3 = new List<double>();
for (int j=0;j<3;++j)
u3.add(0);
a.Add(u3);
b.Add(0);
}
然而,看起来您只是使用固定大小的列表,如果您只使用数组而不是列表,则可以简化初始化代码
List<double> coefs = new List<double>();
double[,] a = new double[3,3];
double[] b = new double[3];
List<double> x2 = new List<double>();
List<double> x3 = new List<double>();
List<double> x4 = new List<double>();
List<double> xy = new List<double>();
List<double> x2y = new List<double>();
for (int i = 0; i < n; ++i)
{
x2.Add(Math.Pow(x[i], 2));
x3.Add(Math.Pow(x[i], 3));
x4.Add(Math.Pow(x[i], 4));
xy.Add(x[i] * y[i]);
x2y.Add(Math.Pow(x[i], 2) * y[i]);
}
a[0,0] = n;
a[0,1] = sum(x, n);
a[0,2] = sum(x2, n);
a[1,0] = a[0,1];
a[1,1] = a[0,2];
a[1,2] = sum(x3, n);
a[2,0] = a[0,2];
a[2,1] = a[1,2];
a[2,2] = sum(x4, n);
b[0] = sum(y, n);
b[1] = sum(xy, n);
b[2] = sum(x2y, n);
答案 1 :(得分:2)
a.Add(u3);
您刚刚将{em>相同的内部列表添加为a
中的所有三个项目。
您需要在每次迭代中添加单独的List<double>
实例。