0
int count = 0;
for(int x = 1; x < 79; x++)
{
    for(int y = 1; y < 21; y++)
    {
        char surroundingCells[] = {arr[x-1][y-1], arr[x][y-1], arr[x-1][y], arr[x+1][y+1], arr[x+1][y-1], arr[x-1][y+1], arr[x][y+1], arr[x+1][y]};
        for(int z = 0; z < 8; z++)
        {
            if((surroundingCells[z] == 'x' || surroundingCells[z] == 'd') && arr[x][y] == 'x')
                count++;
            else if((surroundingCells[z] == ' ' || surroundingCells[z] == 'l') && arr[x][y] == ' ')
                count++;
        }
        if(arr[x][y] == 'x' && (count != 2 || count != 3))
            arr[x][y] = 'd';
        else if(arr[x][y] == ' ' && count == 3)
            arr[x][y] = 'l';
        count = 0;
    }
}

このコードを実行した後に配列を出力すると、x があったすべての場所に 'd' がありますが、一部のインスタンスでは 'x' が残ることがあります。誰かが私の論理エラーを見ることができますか?

4

1 に答える 1

4

あなたのコードは、「x」のすべてのインスタンスが「d」に変更されるようにしています。オンザライン

if(arr[x][y] == 'x' && (count != 2 || count != 3))

arr[x][y]が「x」の場合、条件は常に true と評価されます。が 2 の場合countは 3 ではなく、3 の場合は 2 ではありません。したがって、プログラムは常にarr[x][y]'x' のときにこのブロックに入ります。count2 または 3のときに常に 'd' に変更したくない場合は、その行を次のように変更します。

if(arr[x][y] == 'x' && (count != 2 && count != 3))
于 2012-11-27T17:14:57.347 に答える