当前位置: 首页 > 知识库问答 >
问题:

检查索引是否超出界限以满足if条件

章青青
2023-03-14

你好,我正在练习使用C++中的二维数组,我的问题是,例如,如果我想检查4是否有0或11在北,东,南,西作为邻居,它应该返回false。这是我的if

if((grid[0-1][0] == 0 || grid[0-1][0] == 11 ) && 
 (grid[0+1][0] == 0 || grid[0+1][0] == 11 )  &&
(grid[0][0+1] == 0 || grid[0][0+1] ==11)  &&
 (grid[0][0-1] == 0 || grid[0][0-1] ==11 ))
{
    return false;
}

现在我的问题是,由于4的西面和4的北面都超出了界限,它将永远不会返回false。如何优化if条件使其返回false?这是我的二维阵列

int grid[ROW][COL] = {{ 4, 11, 1, 1 },
                  { 0, 0, 1, 0 },
                  { 0, 1, 5, 0},
                  { 0, 5, 0,0 } };

共有1个答案

王磊
2023-03-14

您缺少边界条件

// Boundary Conditions
    if( i == ROW || j == COL || i < 0 || j < 0 )
        return false;

基于该问题,矩阵定义为

#define ROW 4
#define COL 4

int grid[ROW][COL] = {{ 4, 11, 1, 1 },
                      { 0, 0, 1, 0 },
                      { 0, 1, 5, 0},
                     { 0, 5, 0,0 } };

给定一个位于行I列J的单元格,由cordined的I,J表示,其二维数组中的可视化如下所示

i-1, j-1    i-1, j      i-1,j+1
  i, j-1      i, j        i,j+1
i+1, j-1    i+1, j      i+1,j+1

从上面我们现在可以推导出对应于给定i,j的cordinates/points引用

i,j ---> North( i-1, j  )
i,j ---> South( i+1, j  )
i,j --->  East( i  , j+1)
i,j --->  West( i  , j-1)

现在我们可以写一个小函数来检查任意一个用i和j表示的单元格上的给定值是否为真,下面的函数做类似的操作。检查提供的坐标是否在边界内,以及网格[j]j]处的值是否与我们需要匹配的值相匹配

bool Check( int grid[ROW][COL], int expected, int i, int j )
{
    // Boundary Conditions
    if( i == ROW || j == COL || i < 0 || j < 0 )
        return false;

    return ( grid[i][j] == expected );
}

现在是时候将North,South,West,East计算代码化,并将它们公开为漂亮的函数,

bool northHas( int grid[ROW][COL], int expected, int i, int j )
{
    return check(grid, expected, i-1, j );
}

bool southHas( int grid[ROW][COL], int expected, int i, int j )
{
    return check(grid, expected, i+1, j );
}


bool eastHas( int grid[ROW][COL], int expected, int i, int j )
{
    return check(grid, expected, i, j+1 );
}


bool westHas( int grid[ROW][COL], int expected, int i, int j )
{
    return check(grid, expected, i, j-1 );
}

上面的每个函数都提供了一个更好的接口来处理逻辑程序想要做的事情

if( (northHas( grid, 0, i, j ) || northHas( grid, 11, i, j)) && 
    ( eastHas( grid, 0, i, j ) ||  eastHas( grid, 11, i, j)) &&
    (southHas( grid, 0, i, j ) || southHas( grid, 11, i, j)) &&
    ( westHas( grid, 0, i, j ) ||  westHas( grid, 11, i, j)) )
{
    return false
}
    
 类似资料:
  • 在此输入图像描述 这是我的代码,我试图解决它5个小时,但我没有得到什么问题,任何人都可以帮助。我也检查了资源,但代码与源代码相同,但它没有运行。

  • 我正在努力创造这个游戏https://en.wikipedia.org/wiki/Conway然而,每当我尝试使用printBoard方法时,我都会遇到以下错误 线程“main”java中出现异常。lang.ArrayIndexOutOfBoundsException:索引5超出长度5的界限。 我怎样才能解决这个问题?谢谢

  • 目前,我得到了以下代码的错误。错误是索引4超出了长度4的范围。基本上,我想做的是返回第一个索引,其中数据没有按升序排序。如果对数据进行了排序,该函数将返回数组的长度。例如{10,20,90,5,70}将返回3(90) 我使用的测试用例如下: 任何帮助或线索都将不胜感激。

  • 更新:原来我不得不再次导出一个SVG,并把它放在我文件的数据文件夹中。 我再次面临一个编码问题。抱歉,如果格式不正确,我还需要改进我的编码问题的措辞方式。 ArrayIndexOutOfBoundsException:索引30超出长度30的界限意味着什么?我已经试着自己去查了,但似乎找不到它的意思。 起初,当我添加svg时,代码正常工作,然后我再次添加了同样的文件,也正常工作(Eye2、pupil