-1

我环顾四周寻找这个问题,有一些关于这个问题的答案,但没有一个是我真正理解/或不适合我的。

所以我的问题是在包含字符的二维数组中检查 8 个邻居,* 或 O。

代码:

aliveCheck = isAlive(g,row,column-1);
if(aliveCheck){
    aliveCounter++;
}

aliveCheck = isAlive(g,row,column+1);
if(aliveCheck == 1){
    aliveCounter++;
}

aliveCheck = isAlive(g,row+1,column);
if(aliveCheck == 1){
    aliveCounter++;
}

等等,对于所有 8 个邻居,这都有效,但我对解决方案不满意。

isAlive() 是一个简单的函数,用于确定坐标是 * 还是 O。

任何人都对这个问题有更好的解决方案或有任何关于如何改进它的提示?

谢谢

4

1 回答 1

2
for(int i=-1, i<=1; ++i) {
    for(int j=-1; j<=1; ++j {
        if((i || j) && isAlive(g,row+i,column+j)) {
            aliveCounter++; } } }

此方法假定 、i-1i+1j-1j+1在数组的范围内。

还应该注意的是,虽然这种方法用很少的几行就可以完成您想要完成的工作,但它的可读性要差得多。因此,这种方法应该伴随着非常描述性的评论。此外,这种方法(或任何其他方法)最好包装在适当命名的函数中(例如checkNeighbors)。

于 2013-11-04T23:08:14.320 回答