Как сделать счетчик на основе ответа пользователя? - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь сделать счетчик, который будет увеличиваться в зависимости от ответа пользователя. Вот код, который я получил до сих пор:

        string ok = "";
        int z = 0;
        test(ok, z);
        test1(ok, z);
        Console.WriteLine(z);
    }

        static void test(string ok, int z)
        {

            bool estok = false;
            while (!estok)
            {
                ConsoleKeyInfo saisie = Console.ReadKey(true);
                if (saisie.Key == ConsoleKey.A || saisie.Key == ConsoleKey.B)
                {
                    estok = true;
                    if (saisie.Key == ConsoleKey.A)
                    {

                        z++;
                    }

                    if (saisie.Key == ConsoleKey.B)
                    {
                        z--;
                    }
                }
                else
                {
                    estok = false;
                    Console.WriteLine("Error");
                }
            }


        }
            static void test1(string ok, int z)
            {
                bool estok = false;
                while (!estok)
                {
                    ConsoleKeyInfo saisie = Console.ReadKey(true);
                    if (saisie.Key == ConsoleKey.A || saisie.Key == ConsoleKey.B)
                    {
                        estok = true;
                        if (saisie.Key == ConsoleKey.A)
                        {
                            z++;
                        }

                        if (saisie.Key == ConsoleKey.B)
                        {
                            z--;
                        }
                    }
                    else
                    {
                        estok = false;
                        Console.WriteLine("Error");
                    }
                }
            }

У меня есть 2 функции (test и test1), которые увеличивают int z. Console.WriteLine(z) вернет мне 0 вместо 2, которых я жду (когда у пользователя есть 2 правильных ответа).

Я решил, что приращения не произойдет, поскольку оно находится в функции, и что Console.WriteLine(z) не может достичь z++. Как я могу это изменить?

Как я могу получить результат?

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

параметры метода для int относятся к типам значений, а не к ссылочным типам, насколько я понял из вашего вопроса, вам может потребоваться использовать ключевое слово out в вызове метода или возврате из имеющегося у вас метода.

int z1= z;
test(ok, out z1);
int z2=z;
test1(ok, out z2);

и объявление метода также необходимо будет изменить на

static void test(string ok, out int z)


static void test1(string ok, out int z)

ИЛИ вы можете просто поместить Console.WriteLine(z) в метод test и test1 напрямую.

0 голосов
/ 05 мая 2020

int и другие примитивные типы передаются по значению по умолчанию, тогда как ссылочные типы (например, экземпляры класса) передаются по ссылке; это то, что позволяет изменениям параметра сохраняться после возврата из метода. При обновлении значения параметра вам необходимо передать z по ссылке.

static void test(string ok, int z) становится static void test(string ok, ref int z)

, а вызов test(ok, z); становится test(ok, ref z);

Подробнее о передаче значений по ссылке C# Language Reference

...