如何检查2D数组中的特定值

时间:2016-08-13 02:31:05

标签: c++ arrays multidimensional-array

我在检查二维布尔数组中特定单元格周围的值时遇到了一些问题。我试图假设我们检查的具体值不在2D数组的边缘或角落。我已经设置了一个for循环迭代8次,因为如果我们检查的值不在2D数组的边缘,那么将有8个邻居。这是我的函数,用于获取特定单元格周围的单元格数。

我想为设置为true的(3,5)周围的每个值增加counter变量。

当我运行此代码时,我的计数器返回16.然而,给定单元格周围没有16个真值,循环中的逻辑是错误的吗?

int getNeighborCount(boolMatrix generation, int row, int col){ 


int counter = 0;
row = 3; //the cell we are checking around is at row 3, column 5
col = 5;

//8 neighbors
if (col > 0 && row > 0){
    for (int i = 0; i < 8; i++){
        if(generation.get(row - 1, col - 1)){
            counter++;
        } if(generation.get(row - 1, col)){
            counter++;
        } if(generation.get(row - 1, col + 1)){
            counter++;
        }  if(generation.get(row, col - 1)){
            counter++;
        }  if(generation.get(row, col + 1)){
            counter++;
        }  if(generation.get(row + 1, col - 1)){
            counter++;
        }  if(generation.get(row + 1, col)){
            counter++;
        }  if(generation.get(row + 1, col + 1)){
            counter++;
        }
    }

    cout << "counter is " << counter;
}
return counter;
}

1 个答案:

答案 0 :(得分:4)

这里不需要for循环。这实际上是错误的,因为你有8个正确的if语句来检查该点周围的每个值。确实没有循环的地方:)你会检查8 * 8 = 64点左右,这是错误的。

此外,当点位于0 0(或接近边缘)时,您的if语句不会运行,您可以通过将条件置于if语句中来轻松解决此问题:

if (row > 0 && col > 0 && generation.get(row - 1, col - 1)) //...
if (row > 0 && generation.get(row - 1, col)) //...
//Continue...
相关问题