Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我需要帮助理解通过二维(2D)数组的循环_C# - Fatal编程技术网

C# 我需要帮助理解通过二维(2D)数组的循环

C# 我需要帮助理解通过二维(2D)数组的循环,c#,C#,我正在尽我最大的努力从打印出来的值的角度来理解2D数组,我以前使用嵌套for循环来打印我的值,但我并没有打印出行和列,而是有意打印出[column,column],只是为了看看会返回什么值。我不想把代码改成答案我想给别人解释一下 有人能解释一下为什么我会得到这个结果吗。我知道在第一个循环中,编译器在列的第一行中获得第一个值,但是在下一个循环迭代中,为什么它打印出5而不是4 我得到了第一个循环目的,即每1个循环执行一行,执行3次列循环 public static void Main(strin

我正在尽我最大的努力从打印出来的值的角度来理解2D数组,我以前使用嵌套for循环来打印我的值,但我并没有打印出行和列,而是有意打印出[column,column],只是为了看看会返回什么值。我不想把代码改成答案我想给别人解释一下

有人能解释一下为什么我会得到这个结果吗。我知道在第一个循环中,编译器在列的第一行中获得第一个值,但是在下一个循环迭代中,为什么它打印出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();

你把行和列弄混了

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();
}
publicstaticvoidmain(字符串[]args){
int[,]_tacToe=新int[3,3]{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
对于(int行=0;行<3;行++){
for(int列=0;列<3;列++){
Console.Write(_tacToe[行,列]);
}
Console.WriteLine();
}
Console.ReadLine();
}
我继续为您解决了这个问题,并使您的代码更加清晰*

**我的更清晰的可能与你的很不一样

编辑:

输出为159159159的原因是您完全忽略了
变量。 虽然代码不是最详细的解释,但它完全回答了您的问题。你把行和列弄混了。 通过忽略第一个循环中的值,您只能使用相同的值执行第二个循环

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

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

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
*/
for(int column=0;column<3;column++)
{
Console.Write(_-tacToe[column,column]);
}
/*
列=0 _tacToe[0,0]->打印1
列=1 _-tacToe[1,1]->打印5
列=2 _-tacToe[2,2]->打印9
*/

好的,看来您已经知道代码正在打印
\u tacToe[列,列]
(原文如此),您需要解释为什么您的数组:

{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
在外循环的每次迭代中打印
159

您可以通过使用调试器单步执行循环找到原因。在“row”循环的第一次迭代中,行值为0。然后,内部“列”循环将通过值0、1、2进行循环。对于这些值中的每一个,您都会得到
\u tacToe[column,column]
值(正如您所说,这是故意的)。这意味着您将获得:

_tacToe[0, 0]
_tacToe[1, 1]
_tacToe[2, 2]
您可以将其想象为贯穿数据的对角线:

{1,2,3}

{4,5,6}

{7,8,9}

然后我们有下一个1的“行”迭代。由于只使用列值,因此这也是:

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


这就是为什么每次迭代得到159个。

\u tacToe[row,column],而不是column,column;)您好,谢谢您的回答,但我不是在寻找解决方案,我想要您能读懂我的问题吗。你解释得很好
_tacToe[0, 0]
_tacToe[1, 1]
_tacToe[2, 2]