метод не возвращает правильное значение - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть способ проверить, хочет ли пользователь играть в другую игру, проблема в том, что если пользователь вводит неверный ввод, то после правильного ввода anotherGame по-прежнему устанавливается Y

Когда он выходит из метода, значение anotherGame по-прежнему Y, даже если они выбирают N, если вводят неправильный ввод

Когда этот блок кода выполняется anotherGame возвращает Y нетнезависимо от того, что.

else
{
     Console.WriteLine("ERROR: Invalid input (Y/N) only!");
     promptRedo(anotherGame);
}

ПРИМЕР КОДА:

using System;

public class Program
{
    public static void Main()
    {
        string anotherGame = "y";
        while (anotherGame == "y")
        {
            anotherGame = promptRedo(anotherGame);
            Console.WriteLine(anotherGame);
        }
    }
    static String promptRedo(String anotherGame)
    {
        Console.Write("Would you like to play another game? (Y/N) => ");
        String input = Console.ReadLine().ToLower();
        if (input.Equals("y"))
        {
            anotherGame = "y";
        }
        else if (input.Equals("n"))
        {
            // get any key from user to exit program
            Console.WriteLine();
            Console.WriteLine("Thank you for playing!");
            Console.WriteLine("Press any key to exit ...");
            Console.ReadKey();
            anotherGame = "n";
            Console.WriteLine(anotherGame);
        }
        else
        {
            Console.WriteLine("ERROR: Invalid input (Y/N) only!");
            promptRedo(anotherGame);
        }
        return anotherGame;
    }
}

Ответы [ 4 ]

0 голосов
/ 30 сентября 2018

Вы не присвоили метод «promptRedo (anotherGame)» переменной «anotherGame» в блоке else.

Вместо:

    else
    {
        Console.WriteLine("ERROR: Invalid input (Y/N) only!");
        promptRedo(anotherGame);
    }

вы должны написать:

     else
    {
        Console.WriteLine("ERROR: Invalid input (Y/N) only!");
        anotherGame = promptRedo(anotherGame);
    }
0 голосов
/ 30 сентября 2018

Эта функция не нуждается в аргументе для передачи.вместо вызова функции снова и снова просто поместите ее в цикл:

static String promptRedo()
{ 
    String anotherGame = ""
    do
    {
        Console.Write("Would you like to play another game? (Y/N) => ");
        String input = Console.ReadLine().ToLower();
        if (input.Equals("y"))
        {
            anotherGame = "y";
        }
        else if (input.Equals("n"))
        {
            // get any key from user to exit program
            Console.WriteLine();
            Console.WriteLine("Thank you for playing!");
            Console.WriteLine("Press any key to exit ...");
            Console.ReadKey();
            anotherGame = "n";
            Console.WriteLine(anotherGame);
        }
        else
        {
            Console.WriteLine("ERROR: Invalid input (Y/N) only!");
        }
    } while(anotherGame != "y" && anotherGame != "n")
    return anotherGame;
}
0 голосов
/ 30 сентября 2018

Вам не нужен рекурсивный вызов, все, что вам нужно сделать, это удалить

promptRedo(anotherGame);

Из секции else внутри promptRedo function.

0 голосов
/ 30 сентября 2018
else
{
     Console.WriteLine("ERROR: Invalid input (Y/N) only!");
     promptRedo(anotherGame);
}

В этом коде вы просто вызываете promptRedo () и возвращаете anotherGame в конце функции.Но вы должны вернуться из promptRedo ().

Ваш код должен быть таким, как показано ниже

else
{
     Console.WriteLine("ERROR: Invalid input (Y/N) only!");
     return promptRedo(anotherGame);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...