使用此嵌套的for循环时,为什么我的数组元素不会更新?

时间:2019-06-16 14:26:41

标签: c# multidimensional-array nested-loops

我是一个在线课程的初学者,在这个课程中,我面临着从头开始制作主机Tic-Tac-Toe游戏的挑战。我决定使用2D数组来存储游戏网格的“图形”。为了遍历数组,以便将玩家输入与数组元素进行比较,我选择了一个嵌套的for循环,看起来很不错。它标识与播放器输入匹配的正确元素,但是由于某些原因,我无法更新特定元素。我希望这是有道理的。

除了使用foreach循环外,我没有做过其他尝试,但是我无法弄清楚如何使其通过多维数组正确地进行迭代。

string[,] myArray = { { "1", "2", "3", }, { "4", "5", "6" }, { "7", "8", 
"9" } };

     Console.WriteLine("Player 1's go - enter a number to place your turn");
        string playerInput = Console.ReadLine();

        try
        {
            int parsedInput = Int32.Parse(playerInput);
            if (parsedInput > 9)
            {
                Console.WriteLine("Only enter a number that is in use on the game screen");
                PlayerTurn(myArray);
            }

        }
        catch (FormatException)
        {
            Console.WriteLine("Please input the correct format");
            PlayerTurn(myArray);
        }
        catch (OverflowException)
        {
            Console.WriteLine("Only enter a number you can see on the game screen");
            PlayerTurn(myArray);
        }

 for (int i = 0; i < myArray.GetLength(0); i++)
            {
                for (int j = 0; j < myArray.GetLength(1); j++)
                {
                    if (playerInput == myArray[i,j])
                    {
                        Console.WriteLine(myArray[i,j]); // this is to check 
                                          //that the if statement is working (which it is)

                        myArray[i, j] = "X"; // this isnt working correctly

                        break;
                    }
                }
            }

当玩家按下1键时,我希望myArray [0,0]元素从“ 1”变为“ X”,但是什么也没发生。

2 个答案:

答案 0 :(得分:0)

我认为您的PlayerTurn方法的主体是您发布的代码块。每次调用PlayerTurn都会一次又一次使用给定值初始化myArray。您应该在PlayerTurn之外找到myArray变量

答案 1 :(得分:0)

首先,您创建了一个多维数组(字段)。

这意味着您必须使用来自用户的2个输入才能到达其中的一个数字 多维数组(字段)。 而且您似乎没有游戏领域。

我建议您在嵌套的for循环中放入WriteLines以获取游戏场。

您还应该尝试将整个内容放入while循环中,以使其重新启动。 仅将数组声明放在外面! (尝试一下,如果您不明白,我会帮忙)