我正在尽最大努力了解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
答案 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
变量。
虽然代码不是最详细的说明,但它可以完全回答您的问题。您混合了行和列。
通过忽略第一个循环中的值,您只能执行具有相同值的第二个循环。
您的代码每次都使用完全相同的值遍历数组。
通过将第一个column
与row
交换,代码便不会忽略第一个循环中的值。