我正在尝试制作一个简单的霰弹枪游戏,其中用户与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();
}
答案 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
循环,就无法从函数返回,这是无效的行为。