Почему не обновляется элемент массива при использовании этого вложенного цикла for? - PullRequest
1 голос
/ 16 июня 2019

Я новичок в прохождении онлайн-курса, и в этом курсе мне предстоит с нуля создать консольную игру в крестики-нолики.Я решил использовать 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 голосов
/ 03 июля 2019

Для начала вы создали многомерный массив (поле).

Это означает, что вы должны использовать 2 входа от пользователя, чтобы достичь одного из ваших номеров внутри многомерный массив (поле). И у вас, похоже, нет игрового поля.

Я предлагаю вам вставить WriteLines внутри вложенного цикла for, чтобы получить игровое поле.

Вы должны также попытаться поместить все это в цикл while, чтобы он перезапустился. Держите только ваше объявление массива снаружи! (Попробуй, если не получишь, помогу)

0 голосов
/ 16 июня 2019

Я думаю, что тело вашего метода PlayerTurn - кодовый блок, который вы разместили. Каждый вызов PlayerTurn инициализирует myArray с заданным значением снова и снова. Вы должны найти переменную myArray вне PlayerTurn

...