检查索引是否越界以满足 if 条件

时间:2021-04-04 12:47:25

标签: c++ if-statement

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

DX:AX = AX : r/m16 <-- 16bit(word) operand

现在我的问题是因为 4 以西和 4 以北超出范围,它永远不会返回 false。 如何优化我的 if 条件以使其返回 false? 这是我的二维数组

stack SEGMENT PARA STACk

    db      ?

stack ENDS

data SEGMENT PARA PUBLIC

    db      ?

data ENDS

code SEGMENT PARA PUBLIC

    ASSUME ss: stack, ds: data, cs: code

_start:
    mov     ax, data
    mov     ds, ax

    mov     ax, 10
    mov     dx, 2
    div     dx

    ;output number 10/2 = 5 + 48 = 53(Ascii code '5')
    add     ax, 48
    mov     dx, ax
    mov     ah, 02h
    int     21h

    mov     ah, 04ch
    mov     al, 1
    int     21h

code ENDS
       END _start

1 个答案:

答案 0 :(得分:1)

TL;博士 你缺少边界条件

// 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 } };

给定一个位于 row icol j 的单元格,用协调 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

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 表示的任何单元格的给定值是否为真,下面的函数执行类似的操作.. 检查提供的坐标是否在边界内以及 {{ 1}} 匹配我们需要匹配的内容

grid[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 );
}

上面的每个函数都暴露了一个更好的接口来处理逻辑程序想要做什么

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 );
}