无法访问的代码而不是所有代码路径都返回一个值

时间:2014-01-18 15:44:55

标签: c#

好的我收到了无法访问的代码,并且并非所有代码路径都从此代码块返回值

private string MoveForward()
{
    //if current direction is east, GetRoomEast
    if (Player.CurrentDirection == "EAST")
    {
        return GetroomEast();

        if (Player.NextMove != "")

        {
            Player.Y++;
        }
        else
        {
            Console.WriteLine("You Bumped into a Wall");
        }
        //if GetRoomEast is not "", then playercol = playercol+1;
        //if current direction is west...
    }
}

和我在顶部的初始化变量是

public struct DragonPlayer
{
    public int X, Y;
    public string CurrentDirection;
    public string NextMove;
}

public class DragonGameboard
{
    public string[,] GameboardArray;
    public DragonPlayer Player;
    private Random r;

    public DragonGameboard()
    {
        GameboardArray = new string[4, 4];
        Player.CurrentDirection = "EAST";
        Player.NextMove = "";
        r = new Random();
        Player.X = r.Next(0, 4);
        Player.Y = r.Next(0, 4);
        GenerateRandomBoard();
    }
}

为什么这样做?我确定它必须是非常愚蠢的东西,但我无法弄清楚它是什么?

5 个答案:

答案 0 :(得分:1)

你在if语句之前从函数返回,它永远不会转到你的if语句。因此你的if语句变成无法访问的代码

 return GetroomEast();

        if (Player.NextMove != "")

您应该将此return语句放在if语句之后。

答案 1 :(得分:0)

代码的每个路径都必须返回string类型的值。另外,您拥有永远无法执行的代码,即:

if (Player.NextMove != "")
{
    Player.Y++;
}

else
{
    Console.WriteLine("You Bumped into a Wall");
}

你已经返回了一个值,所以在此之后没有任何内容被执行。

此外,导致函数结束的每个路径都返回一个值。按逻辑方式查看代码并查找方案,您会发现很多。

也许我建议慢慢开始学习基础知识,因为这些错误对于任何编程语言都是非常基础的+你已经得到了这个消息,这很清楚。编程游戏对程序员来说并不是一个好的起点。

答案 2 :(得分:0)

您定义了MoveForward()转发方法以返回字符串,但您没有返回一个字符串。将定义更改为:

private void MoveForward();

...或返回一个字符串。

答案 3 :(得分:0)

我在代码中添加了注释,以显示无法访问代码的原因以及为什么所有代码​​路径都不返回值。

private string MoveForward()
{
    if (Player.CurrentDirection == "EAST")
    {
        return GetroomEast(); //Once you return the value here it ends the call.

        if (Player.NextMove != "") //This line (or anything below it) will never run.
        {
            Player.Y++;
        }
        else
        {
            Console.WriteLine("You Bumped into a Wall");
        }
        //if GetRoomEast is not "", then playercol = playercol+1;
        //if current direction is west...
    }

    //We reach here if Player.CurrentDirection does not equal "EAST"
    //As there is no more code there is no returned value.
    //You would need to do something like return NoValidMove()
}

答案 4 :(得分:0)

在这一行之后,return GetroomEast()执行被保释出循环,因此,你得到无法访问的代码错误。在下一个if,else块中也没有返回任何内容。因为你的方法是字符串返回类型....它必须返回字符串..