我上了一门编程课,我正在重温那些我不太正确的旧程序。这是一个生命游戏程序,我有一个关于代码清理的问题。
true
在检查其邻居的布尔值是否为或之前,我需要确保数组元素在界限内false
。我有一个语句来检查firstGen[0][0]
' 的左上角(上一行,左一列)是否在界限内。是否有一种更简单或更优雅的方法来检查元素是否在边界内,或者将元素检查限制在给定数组的边界范围内,而无需在&&
每个if
语句中使用四个条件?
请注意,到目前为止我只更改了第一个if
语句,因此其他地方可能存在错误。我还排除了其他邻居的边界检查。
public static boolean[][] generation(boolean[][] firstGen)
{
int length = firstGen.length;
boolean[][] newGen = new boolean[length][length];
for (int j = 0; j < firstGen[0].length; j++)
{ for (int i = 1; i < firstGen.length; i++)
{
int count = 0;
if ((i-1 >= 0) && (i-1 < length) && (j-1 >= 0) && (j-1 < length)) //top-left element exists
{ if (newGen[i-1][j-1] == true) count++; } //increment `count` if top-left element is true
if ((newGen[i][j] == false) && (count == 3)) newGen[i][j] = true;
else if ((newGen[i][j] == true) && (count == 1)) newGen[i][j] = false;
else if ((newGen[i][j] == true) && (count > 3)) newGen[i][j] = false;
else break;
}
}
return newGen;
}