我参加了一门编程课程,我正在重温旧计划,但我并不完全正确。这是一个生命游戏程序,我有一个关于代码清理的问题。检查布尔数组中是否存在元素
我需要确保在检查其邻居的布尔值是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;
}
+1突然就这么简单了:-)另外我还会推荐他下一步需要的东西:一种优雅的方式来遍历所有邻居而不需要重复代码。 –
@assylias有时Java解决方案非常简单。他们是那种让你只想把你的头撞到墙上,让事情变得不必要的复杂。我还要感谢你提醒关于真布尔条件和真布尔条件。再一次,这样的事情。 – rice2007
@Marko我不确定我是否已经解决了这个问题,但我还有一个精神方面的解决方案来处理下一步。我想嵌套'for'循环。 – rice2007