1

私はコンウェイのライフゲームプログラムに取り組んでおり、死んだ/生きている細胞が周囲の隣人をチェックし、周囲の生きている隣人の数を数えているところです。現在、[0][0]のチェックに取り組んでいます。私が抱えている問題は、[0][0]が周囲のインデックスと一緒にチェックされていることです。「if(k!= o && l!= p)」とすると、[0] [0]は除外されると思いましたが、そうではありません。

public class Life {

public static void main(String[] args)
{
    int N = 5;
    boolean[][] b = new boolean[N][N];
    double cellmaker = Math.random();

    int i = 0;
    int j = 0;


    int o=0;
    int p=0;
    int livecnt = 0; //keeps track of the alive cells surrounding cell

     System.out.println("First Generation:");
     // Makes the first batch of cells
     for ( i = 0; i < N ; i++)
     {

         for ( j = 0; j< N; j++)
         {
              cellmaker = Math.random();


             if (cellmaker > 0.5) // * = alive; - = dead
             {
                 b[i][j]=true;

                 System.out.print( "* ");

             }


             if (cellmaker < 0.5)
            { b[i][j] = false;


             System.out.print("- ");

            }

         }
         System.out.println();
     }       

     // Checks for the amount of "*" surrounding (o,p)
     for (int k=(o-1); k <= o+1; k++ )
        {

            for (int l =(p-1); l <=p+1; l++)
            {
                 if ( k >= 0 && k < N && l >= 0 && l < N) //for the border indexes.
                 { 
                     //if (k!=o && l!=p)
                    {
                        if (b[k][l] == true)
                            {

                                livecnt++;

                            }
                    }

                 }

            }
        } 
    System.out.println(livecnt++);
}

}
4

2 に答える 2

2

(o、p)の周囲を確認したい場合は、次のようにしてみてください。

if (!(k== o && l==p))

それ以外の:

if (k!=o && l!=p)

上記の条件では、座標(k、p-1)、(k、p + 1)、(k-1、p)、および(k + 1、p)をチェックしていないためです。

于 2012-11-23T23:21:20.043 に答える
2

あなたのコードはほぼ正しいです。あなたはただ変える必要があります

if (k!=o && l!=p)

の中へ

if (k!=o || l!=p)

(k,l)座標が等しくない場合にのみフィールドをカウントする必要があり(o,p) ます。言い換えると、!(k == o && l == p)ド・モルガンの法則 に従って(k!=o || l!=p)等しいことを覚えておいてください。!(k==o && l==p)

于 2012-11-23T23:43:55.620 に答える