在2D数组中分配值不起作用-交换索引

时间:2019-02-06 22:56:18

标签: c# arrays for-loop console 2d

基本上我有一个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();

1 个答案:

答案 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);
}