使用相同的数字填充二维数组的列

时间:2016-02-07 03:45:04

标签: c# multidimensional-array

我试图创建一段代码,最后会显示出来

1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4 
5 5 5 5 5

但我所写的内容却显示了

1 1 1 1 1
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 0 0 0 0

这是我编写的代码

int col, lig, test;
col = 0;
test = 0;
for (lig = mat.GetLowerBound(0); lig <= mat.GetUpperBound(0); lig++)
{
    mat[lig, col] = 1 + test++;
}
for (col = mat.GetLowerBound(0) + 1; col <= mat.GetUpperBound(0); col++)
{
    mat[0, col] = mat[0, col] + 1;
}

我已尝试过多项内容,但其中没有一项是有效的,我可以修改哪些内容以便提供我想要获得的结果?

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  • 您正在维度0中检查第二个循环(对于col)的数组范围,但在数组的第1维中使用col:您应该使用{ {1}}和GetLowerBound(1)代替。这不是问题,因为你有一个方阵,但你应该知道。
  • 您需要在行和列上使用嵌套循环,而不是两个单独的j循环。您的代码正在执行您告诉它的操作:
    • 在第一个循环中,您设置的是GetUpperBound(1),但mat[lig, col]为零,因此您只需在第一列中设置值。通过在循环中声明collig (请参阅下面的代码),您可以避免此错误。
    • 在第二个循环中,您设置的col只会更改第一行中的值。
    • 此外,您正在mat[0, col]开始第二个循环,它将错过第一个元素。大概你是故意这样做的,因为它将元素设置为(0,0)到2。

您需要的代码是:

mat.GetLowerBound(0) + 1

您可以通过注意int test = 0; for ( int lig = mat.GetLowerBound(0); lig <= mat.GetUpperBound(0); lig++ ) { test++; for ( int col = mat.GetLowerBound(1); col <= mat.GetUpperBound(1); col++ ) mat[lig, col] = test; } 始终为test并完全消除lig + 1来进一步简化此操作:

test