我需要帮助来了解遍历二维(2D)数组的循环

时间:2019-07-10 12:49:49

标签: c#

我正在尽最大努力了解2D数组的价值,我曾经嵌套过for循环以打印出我的价值,但我没有故意打印出行和列,而是故意打印了[column,column]只是看看将返回什么值。我不想将代码固定为答案,我想为某人解释

有人可以向我解释为什么我得到159打印的结果。我知道在第一个循环中,编译器会在列的第一行中获取第一个值,但是在下一个循环迭代中,为什么它会打印出5而不是4?

我得到的第一个循环目的是每1个循环行一次,行执行3次列循环。

  public static void Main(string[] args)
        {
            int[,] _tacToe = new int[3, 3]
            {
              {1,2,3} ,
              {4,5,6},
              {7,8,9}
            };
            for (int row = 0; row < 3; row++)
            {
                Console.WriteLine("gggg");
                for (int column = 0; column < 3; column++)
                {
                    Console.Write(_tacToe[column, column]);
                }
                Console.WriteLine();
            }
            Console.ReadLine();

结果:

gggg
159
gggg
159
gggg
159

3 个答案:

答案 0 :(得分:2)

因为您同时使用column作为两个索引,所以同时增加了行和列的索引

for (int column = 0; column < 3; column++)
{
    Console.Write(_tacToe[column, column]);
}

/*
column = 0 _tacToe[0, 0] -> prints 1
column = 1 _tacToe[1, 1] -> prints 5
column = 2 _tacToe[2, 2] -> prints 9
*/

答案 1 :(得分:1)

好,这样看来您已经知道代码正在打印_tacToe[column, column](原文如此),并且需要解释为什么要排列以下数组:

{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }

在外循环的每次迭代中打印159

您只需使用调试器单步执行循环即可找到原因。在“行”循环的第一次迭代中,行值为0。然后,内部“列”循环将循环遍历值0、1、2。在每个这些值上,您都得到{{1} }价值(如您所说,是故意的)。这意味着您将获得:

_tacToe[column, column]

您可以将其想象成数据中的对角线:

{ 1 ,2,3},

{4, 5 ,6},

{7,8, 9 }

然后我们将进行下一个“行”迭代1。由于仅使用列值,因此再次出现:

_tacToe[0, 0]
_tacToe[1, 1]
_tacToe[2, 2]

以此类推。

这就是为什么每次迭代获得159的原因。

答案 2 :(得分:-2)

您混合了行和列。

public static void Main(string[] args) {

    int[,] _tacToe = new int[3, 3] {
        { 1, 2, 3 },
        { 4, 5, 6 },
        { 7, 8, 9 }
    };

    for (int row = 0; row < 3; row++) {

        for (int column = 0; column < 3; column++) {
            Console.Write(_tacToe[row, column]);
        }
        Console.WriteLine();
    }

    Console.ReadLine();
}

我继续为您修复了该问题,并使您的代码更清晰易懂*。

**我的文字更清晰,可能与您完全不同!

编辑:

输出为159、159、159的原因是因为您完全忽略了row变量。 虽然代码不是最详细的说明,但它可以完全回答您的问题。您混合了行和列。 通过忽略第一个循环中的值,您只能执行具有相同值的第二个循环。

您的代码每次都使用完全相同的值遍历数组。 通过将第一个columnrow交换,代码便不会忽略第一个循环中的值。