基本上我有一个2D数组,看起来像这样:
0 x x -1
x 0 x x
x x 0 x
-1 x x 0
如果使用两个索引为'i'和'j'的for循环(嵌套),并且彼此相等,例如i和j = 2,则放置在array [i,j]中的值将为'0'。如果'i'= array.Length-1且'j'= 0(反之亦然),则array [i,j]中的值为-1。
我想做的是将随机数放在1到20之间,用'x'表示。我知道该怎么做,但是,我希望“ 0”另一边的“ x”中的数字相等。例如,
值@ i = 2,j = 3等于值@ i = 3,j = 2。
现在我已经在上一个程序中通过执行以下操作来完成此操作:
array[j, i] = array[i, j]
但是由于某种原因,在这个新程序中,它根本不再起作用。
怎么了?
这是实际的代码:
size = r.Next(4, 8);
V = new int[size, size];
for (int i = 0; i < size; i++)
{
s = "";
for (int j = 0; j < size; j++)
{
if (i == j)
{
V[i, j] = 0;
}
else if ((i == size - 1 && j == 0) || (i == 0 && j == size - 1))
{
V[i, j] = -1;
}
else
{
V[i, j] = r.Next(1, 20);
}
V[j, i] = V[i, j];
s += "|" + V[i, j] + "|";
}
Console.WriteLine(s);
}
Console.Read();
答案 0 :(得分:0)
该算法的问题在于其重新覆盖(覆盖两次)矩阵的下半部分。 请尝试以下循环:
for (var i = 0; i < size; i++)
{
s = "|";
for (int j = 0; j < size; j++)
{
if (i == j)
{
V[i, j] = 0;
}
else if (i == size - 1 && j == 0 || i == 0 && j == size - 1)
{
V[i, j] = -1;
}
else if (i < j)
{
V[i, j] = r.Next(1, 20);
V[j, i] = V[i, j];
}
s += $"{V[i, j],2}|";
}
Console.WriteLine(s);
}