我參加了一門編程課程,我正在重溫舊計劃,但我並不完全正確。這是一個生命遊戲程序,我有一個關於代碼清理的問題。檢查布爾數組中是否存在元素
我需要確保在檢查其鄰居的布爾值是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