【问题标题】:Objective-C Using an enum in switch statements, one's working but the other won'tObjective-C 在 switch 语句中使用枚举,一个可以工作,另一个不能
【发布时间】:2011-03-26 12:09:04
【问题描述】:

我在这里写了一段代码,有点进退两难。我必须根据之前的朝向和移动来确定朝向。

我为 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;
    }

}

所以,据我所知,所有这些开关的工作方式都差不多,但第三个不工作,前两个工作得很好。有谁知道可能是什么问题?

【问题讨论】:

    标签: objective-c enums switch-statement


    【解决方案1】:

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

    【讨论】:

    • 哇,现在我觉得自己真的很愚蠢 :) 我正在将那些从 x = x + 1 更改为 x++ 并且从未完成它们。在调试时,代码似乎只是跳过了整个开关,我从不查看语句,只是查看开关本身。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多