我有一个2D阵列,可作为国际象棋的棋盘。我希望用户输入在Smith Notation中。我的数组的设置方式是,如果用户说他们想将一块移入或移出第8行(从用户的 Angular 来看,第一行),则他们正在与数组中的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]进行交互,因此将不需要此功能。但是,我仍然想知道其他解决此问题的方法。
预先感谢您的回复。

最佳答案

看起来这简化为:

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

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

10-08 08:23
查看更多