【发布时间】:2018-11-03 15:08:17
【问题描述】:
我目前开始学习 Java,并尝试重新创建康威的生命游戏。我的代码有点像细胞死亡和出生,但它们似乎没有遵循预期的规则。我正在使用以下两种方法来应用规则:
public boolean nextState( int row, int col )
{
if(a[row][col]==false) //dead cells
{
int neighbors=0;
for(int r=row-1; r<=row+1; r++)
{
for(int c=col-1; c<=col+1; c++)
{
if(r>=0 && c>=0 && r<a.length && c<a[0].length) //exclude edges
{
if(a[r][c])
{
neighbors++;
}
}
}
}
if(neighbors==3)
{
return true;
}
else
{
return false;
}
}
else //alive cells
{
int neighbors=-1;
for(int r=row-1; r<=row+1; r++)
{
for(int c=col-1; c<=col+1; c++)
{
if(r>=0 && c>=0 && r<a.length && c<a[0].length) //exclude edges
{
if(a[r][c])
{
neighbors++;
}
}
}
}
if(neighbors==3 || neighbors==2)
{
return true;
}
else
{
return false;
}
}
}
public void nextGeneration()
{
for(int r=0; r<a.length; r++)
{
for(int c=0; c<a[0].length; c++)
{
a[r][c]=nextState(r,c);
}
}
}
nextState 返回单元格 a[row][col] 在下一代中是死的还是活着的,这取决于它的当前状态和活着的邻居的数量。
nextGeneration 将 nextState 应用于所有单元格。
我很难理解为什么某些单元格的状态确实发生了变化,但并未以预期的方式发生变化。
【问题讨论】:
-
欢迎来到 SO!只是一个提示,想想你将
nextState(r, c)的结果存储在哪里,以及它如何影响对nextState(r, c)的 next 调用。
标签: java multidimensional-array conways-game-of-life