循环通过数组,向上和向左方向工作,向下和向右方向返回错误?

时间:2016-05-12 17:22:30

标签: c++ arrays

对不起,这个问题的措辞不是很好,我不确定如何提问。

此声明可正常使用

if (direction == 'w' || direction == 'W')
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            if (board[i][j] == playerTile)
            {
                if (board[i-1][j] == ' ')
                {
                    board[i - 1][j] = playerTile;
                    board[i][j] = ' ';
                }
                else
                {
                    std::cout << "Invalid Move" << std::endl;
                    _getch();
                }
            }
        }
    }
}

虽然这个导致无效错误,并且玩家移动到棋盘底部,我认为这与[i + 1]部分有关,就像它改为[i-1]一样;像之前的if语句一样

else if (direction == 's' || direction == 'S')
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            if (board[i][j] == playerTile)
            {
                if (board[i + 1][j] == ' ')
                {
                    board[i + 1][j] = playerTile;
                    board[i][j] = ' ';
                }
                else
                {
                    std::cout << "Invalid Move" << std::endl;
                    _getch();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

最安全的解决方案是在使用之前测试数组表达式:

if (i > 0)
{
  if (board[i-1][j] /*... */

and
if ((i + 1) < rows)
{
  if (board[i+1][j] /* ... */

这应该说明您在代码中看到问题的原因。