2D阵列不会转发c#

时间:2016-03-02 17:54:22

标签: c# arrays

我有一个简单的任务来转发方形2D数组: (我需要以非常简单的方式进行,没有容器等)

static void Main(string[] args)
    {


        double[,] a = new double[5, 5];
        Random random = new Random();

        for(int i = 0; i < 5; i++)
        {
            for(int j = 0; j < 5; j++)
            {
                a[i, j] = random.NextDouble();
            }
        }

        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                Console.Write(a[i, j] + " ");

            }
            Console.WriteLine();
        }


        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                double temp = a[i, j];
                a[i, j] = a[j, i];
                a[j, i] = temp;
            }
        }

        Console.WriteLine("\n\n\n");
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                Console.Write(a[i, j] + " ");

            }
            Console.WriteLine();
        }

        Console.ReadKey();


    }
}

我期待反转数组作为输出。但是,我在这里得到了相同的数组。请帮我看看我做错了什么? Console output. The double array won't transponse

3 个答案:

答案 0 :(得分:6)

这是因为您正在执行从for0的{​​{1}}个循环。所以你要做两次转置。

例如,对于5i=0,您将j=1转换为a[0,1],将a[1,0]i=1转换为{{1}的值}}和j=0回到原来的位置。

您可以将内部a[1,0]a[0,1]设为for,因此这些职位只会被交换一次。

0

答案 1 :(得分:1)

第三个循环交换数组的两个对角线,你必须只交换一半的元素:

for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < i; j++)
    {
        double temp = a[i, j];
        a[i, j] = a[j, i];
        a[j, i] = temp;
    }
}

答案 2 :(得分:0)

在交换循环中,您需要更改内部循环限制以避免双重交换问题。更改: $(window).load(function(){ $(".header > *").hide().fadeIn("slow"); }); for(j = 0; j < 5; j++)