我正在研究Conway的生命游戏计划,我正处于死亡/活细胞检查周围邻居并计算周围邻居的数量。现在,我正在检查[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++);
}
}
答案 0 :(得分: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)
答案 1 :(得分:2)
您的代码几乎是正确的。你只需要改变
if (k!=o && l!=p)
到
if (k!=o || l!=p)
如果坐标(k,l)
不等于(o,p)
,您只想计算一个字段
换句话说:!(k == o&amp;&amp; l == p)
请记住(k!=o || l!=p)
等于!(k==o && l==p)
根据{{3}}。