有没有更优雅的方法来找到正确的数字?

时间:2012-01-29 07:50:42

标签: c++ switch-statement case

我有一个2D数组,可作为国际象棋游戏的棋盘。我希望用户输入在Smith Notation。设置数组的方式是,如果用户说他们想要一块移动到第8行(从用户的角度来看最上面一行),它们就会与数组中的row[0]进行交互。因此,为了解决这个问题,我编写了一个函数,将用户的输入转换为数组的正确行。然而,它看起来有点笨重,我想知道具有更多经验的程序员将如何解决这个问题。

int convertToCorrectRow(int row)
{
    int newRow;
    switch (row) {
        case 1:
            newRow = 7;
            break;
        case 2:
            newRow = 6;
            break;
        case 3:
            newRow = 5;
            break;
        case 4:
            newRow = 4;
            break;
        case 5:
            newRow = 3;
            break;
        case 6:
            newRow = 2;
            break;
        case 7:
            newRow = 1;
            break;
        case 8:
            newRow = 0;
            break;            
        default:
            assert(false);
            break;
    }
    return newRow;
}

我确实想过翻转数组并将其反向显示给用户,这样当用户与第8行交互时,它们实际上与数组中的row[7]交互,这将消除对此功能的需求。但是,我仍然想知道解决这个问题的其他方法。 提前感谢您的回复。

2 个答案:

答案 0 :(得分:6)

看起来这简化为:

int convertToCorrectRow(int row) {
    assert(row > 0 && row <= 8);
    return 8 - row;
}

如果row来自用户输入而没有进一步验证,我不会使用断言。

答案 1 :(得分:5)

为什么不呢......

int convertToCorrectRow(int row)
{
    assert(row < 9 && row > 0);
    return 8 - row;
}