繁体   English   中英

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

[英]not all code paths return a value ' '

我正在尝试制作一个简单的shot弹枪游戏,在该游戏中,用户与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();
}

您有一系列的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;
}

这样,代码将循环直到其具有有效值为止,然后在退出循环后处理要返回的项目,从而确保代码中的每个路径都返回了某些内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM