【问题标题】:how to check around a specific value in a 2D array如何检查二维数组中的特定值
【发布时间】:2016-08-13 02:31:04
【问题描述】:

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

我想为 (3,5) 附近的每个设置为 true 的值增加 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;
}

【问题讨论】:

    标签: c++ arrays multidimensional-array


    【解决方案1】:

    这里不需要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...
    

    【讨论】:

    • 您可能还应该检查一下您是否也在数组的右侧或底部边缘。
    • @Xenotod 是的,是的。这留作练习:)
    • 太棒了!我实际上在发布这个和中提琴之后就删除了 for 循环!有效。感谢您的帮助!我现在将检查边缘(:
    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2015-12-08
    • 1970-01-01
    • 2014-02-13
    • 2017-02-10
    • 2021-09-20
    相关资源
    最近更新 更多