尽管我已经按升序初始化了数组,但我无法使该函数返回true。

bool won(int gameBoard[][SIZE])
{
    for(int i=0;i<SIZE;i++)
    {
        for(int j=0;j<SIZE;j++)
        {
            if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0])
            {
                return false;
            }
        }
    }
    return true;
}

最佳答案

您的代码中有两个问题。

1. i和j的值在某个阶段超出范围。

2.检查数组是否按升序排列的条件是错误的。

让我们一一解决


  
  为了将i,j的值保持在范围内,请像这样更改for循环
  


之前:

for(int i=0;i<SIZE;i++)
{
    for(int j=0;j<SIZE;j++)
    {
    }
}


后:

for(int i=0;i<SIZE-1;i++)
{
    for(int j=0;j<SIZE-1;j++)
    {
    }
}


说明:

您的程序遇到的问题是,当j的值变为SIZE-1时,您正在检查gameBoard[i][j]>gameBoard[i][j+1]。但是gameBoard[i][j+1]会尝试访问gameBoard[i][SIZE],并且您知道该索引中没有值,因为您保存的值从0到SIZE-1。
当程序检查最后一行时,i也会发生相同的问题。


  
  要修复检查条件if the array is in ascending order or not,请按以下方式更改条件:
  


之前:

if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0])


后:

if((j!=SIZE-2 && gameBoard[i][j]>gameBoard[i][j+1])
||(j==SIZE-2 && ((gameBoard[i][j]>gameBoard[i][j+1])||(gameBoard[i][j+1]>gameBoard[i+1][0])))


说明:

j的索引小于SIZE-2时比较gameBoard[i][j]gameBoard[i][j+1]并查看它们是否符合条件。但是当j的索引等于SIZE-2时,我们必须进行比较两件事。一个是将gameBoard[i][j]与下一个元素gameBoard[i][j+1]进行比较,另一个是将j的下一个元素与下一个第一个元素gameBoard[i+1][0]进行比较。
N:B:只有那时,您才应该检查gameBoard[i][j]是否大于gameBoard[i+1][0],而不是每次。

关于c++ - 如何在C++中检查二维数组是否按升序排列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42047495/

10-12 17:12