并非所有代码路径都返回值''

时间:2015-06-24 16:20:53

标签: c#

我正在尝试制作一个简单的霰弹枪游戏,其中用户与CPU以及拾取镜头,屏蔽或重新加载但在我的GetOptionFromUser中我不断收到错误'ShotgunGame.Program.GetOptionFromUser()':并非所有代码路径返回一个值

任何指导都将受到赞赏这是我的方法

enum ShotgunOption
{
    Shoot = 1,
    Reload = 2,
    Shield = 3,
}

static void DisplayMenu()
{
    Console.WriteLine("Please pick an item:");
    Console.WriteLine("S - Shoot");
    Console.WriteLine("P - Shield");
    Console.WriteLine("R - Reload");         
    //Console.WriteLine("X - Exit");
}


static ShotgunOption GetOptionFromUser()
{
    char menuItem;
    DisplayMenu();
    menuItem = char.ToUpper(char.Parse(Console.ReadLine()));

    if (menuItem == 'S')
    {
        return ShotgunOption.Shoot;
    }
    else if (menuItem == 'P')
    {
        return ShotgunOption.Shield;
    }
    else if (menuItem == 'R')
    {
        return ShotgunOption.Reload;
    }

    while (menuItem != 'S' && menuItem != 'P' && menuItem != 'R')
    {
        Console.WriteLine("Error - Invalid menu item");
        DisplayMenu();
        menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
    }
}

static void DisplayResults(ShotgunOption UserOption,ShotgunOption CPUOption, int UserScore, int UserBullets, int CPUBullets)
{
    Console.Clear();
    Console.WriteLine("Giving up?");
    Console.WriteLine("You Chose {0}, The Computer Chose{1} Your Score is {3} . You had {4} Bullet(s). The CPU had {5} bullets(s).", UserOption, CPUOption, UserScore, UserBullets, CPUBullets);
    Console.WriteLine("Thanks for playing!");
    Console.ReadKey();
}

2 个答案:

答案 0 :(得分:4)

您有一系列if else if返回的内容。但是你有

while (menuItem != 'S' && menuItem != 'P' &&
        menuItem != 'R')
...

没有退货声明。您需要在方法结束时以及if中返回。

你要做的是什么,你的代码做了什么,有点分开。这样的事情会更好地为你服务:

static ShotgunOption GetOptionFromUser()
{
    char menuItem = null;
    DisplayMenu();
    var menuItem = char.ToUpper(char.Parse(Console.ReadLine()));

    while (menuItem != 'S' && menuItem != 'P' && menuItem != 'R')
    {
        Console.WriteLine("Error - Invalid menu item");
        DisplayMenu();
        menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
    }

    if (menuItem == 'S')
    {
        return ShotgunOption.Shoot;
    }
    else if (menuItem == 'P')
    {
        return ShotgunOption.Shield;
    }
    return ShotgunOption.Reload;
}

这样,代码循环直到它有一个有效的值,然后处理它离开循环后要返回的项,确保代码中的每个路径返回一些东西。

答案 1 :(得分:4)

GetOptionFromUser函数中,在if/else if/else if结构之后,没有返回语句。一旦程序退出该结构并进入while循环,就无法从函数返回,这是无效的行为。