【问题标题】:Is there a more graceful way to find the correct number?有没有更优雅的方法来找到正确的数字?
【发布时间】:2012-01-29 07:50:42
【问题描述】:

我有一个 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] 交互,这样就不需要这个函数了。但是,我仍然想知道解决此问题的其他方法。 提前感谢您的回复。

【问题讨论】:

    标签: c++ switch-statement case


    【解决方案1】:

    看起来这简化为:

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

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

    【讨论】:

    • 德普。现在我很尴尬。我知道有一种更简单的方法可以做到这一点,但显然我太愚蠢了,无法想到它;)谢谢!
    【解决方案2】:

    为什么不...

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

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 2015-10-10
      • 2022-11-13
      • 1970-01-01
      • 2011-04-05
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      相关资源
      最近更新 更多