Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C在switch语句中使用enum,one';他在工作,但另一个赢了;T_Objective C_Enums_Switch Statement - Fatal编程技术网

Objective-C在switch语句中使用enum,one';他在工作,但另一个赢了;T

Objective-C在switch语句中使用enum,one';他在工作,但另一个赢了;T,objective-c,enums,switch-statement,Objective C,Enums,Switch Statement,对于我写的一段代码,我有点进退两难。我必须根据之前的面和移动来确定面 我简单列举了4个面: typedef enum directions {N,E,S,W}Facing; 然后有三个函数,每个函数使用一个简单的switch语句,根据当前面临的问题执行操作。现在,函数turnLeft和turnRight工作得很好,但是在函数move中,switch语句没有碰到任何情况,即使我确定输入了N、E、S或W - (Facing) turnLeft: (Facing) f { switch (f

对于我写的一段代码,我有点进退两难。我必须根据之前的面和移动来确定面

我简单列举了4个面:

typedef enum directions {N,E,S,W}Facing;
然后有三个函数,每个函数使用一个简单的switch语句,根据当前面临的问题执行操作。现在,函数turnLeft和turnRight工作得很好,但是在函数move中,switch语句没有碰到任何情况,即使我确定输入了N、E、S或W

- (Facing) turnLeft: (Facing) f
{
    switch (f)
    {
        case N:
            f = W;
            break;
        case E:
            f = N;
            break;
        case S:
            f = E;
            break;
        case W:
            f = S;
            break;
        default:
            break;
    }
    return f;
}

- (Facing) turnRight: (Facing) f
{
    switch (f)
    {
        case N:
            f = E;
            break;
        case E:
            f = S;
            break;
        case S:
            f = W;
            break;
        case W:
            f = N;
            break;
        default:
            break;
    }
    return f;
}

- (void) move:(Facing) f
{
    switch (f)
    {
        case N:
            y+1;
            break;
        case W:
            x+1;
            break;
        case S:
            y-1;
            break;
        case E:
            x-1;
            break;
        default:
            break;
    }

}

所以,据我所知,所有这些开关都工作相同,但第三个开关不工作,前两个工作非常好。有人知道问题出在哪里吗?

第三个switch语句是正确的,其他两个也是正确的,但我认为你的问题是它实际上没有做任何事情。你计算y+1,x+1,y-1或x-1,然后把结果扔掉。您正在寻找例如
x=x+1 

哇,现在我觉得真的很愚蠢:)我正处于从x= x+1到x++的过程中,从未完成它们。在调试过程中,代码似乎跳过了整个开关,我从不看语句,只看开关本身。谢谢