尽管我已经按升序初始化了数组,但我无法使该函数返回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/