-1

この質問について調べてみましたが、質問についていくつかの回答がありますが、私が本当に理解している/または私に適していないものはありません。

したがって、私の問題は、* または O のいずれかの文字を含む 2 次元配列で 8 つの隣人をチェックすることです。

コード:

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-1このメソッドは、 、i+1j-1、およびj+1がすべて配列の境界内にあると想定しています。

また、このアプローチでは、達成しようとしていることが非常に少ない行数で達成されますが、可読性が大幅に低下することにも注意してください。そのため、このアプローチには非常にわかりやすいコメントを付ける必要があります。さらに、このアプローチ (またはその他の方法) は、適切な名前の関数 ( などcheckNeighbors) でラップするのが最適です。

于 2013-11-04T23:08:14.320 に答える