尽管我已经按升序初始化数组,但我无法让此函数返回 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。检查数组是否按升序排列的条件错误。
让我们一一解决
- To keep the value of i,j inside the range change the for loop like this
之前:
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
也会出现同样的问题。
- To fix the checking condition
if the array is in ascending order or not
change your condition like this:
之前:
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/