Objective-C Используя перечисление в выражениях switch, один работает, а другой - нет - PullRequest
0 голосов
/ 26 марта 2011

У меня есть небольшая дилемма с фрагментом кода, который я написал. Я должен определить облик на основе предыдущего облика и хода.

Я сделал простое перечисление для 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;
    }

}

Итак, насколько я знаю, все эти переключатели работают одинаково, но третий не работает, первые два работают отлично. У кого-нибудь есть идеи, в чем может быть проблема?

1 Ответ

1 голос
/ 26 марта 2011

Третий оператор switch корректен, как и два других, но я думаю, что ваша проблема в том, что он на самом деле ничего не делает. Вы вычисляете y + 1, x + 1, y-1 или x-1, а затем просто отбрасываете результат. Вы ищете, например, x = x+1;

...