簡體   English   中英

檢查元素是否存在於布爾數組中

[英]Checking if Element Exists in Boolean Array

我參加了編程班,並且正在重新學習不太正確的舊程序。 這是一個“人生游戲”程序,我對代碼清理有疑問。

我需要先檢查數組元素的邊界,然后再檢查其鄰居的布爾值是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;
      }

如果ij在范圍之內,則可以確定i - 1 < lengthj - 1 < length都是正確的。

也:

  • i - 1 >= 0可以寫入i > 0
  • if (condition == true)可以重寫if (cond)

因此,您可以替換:

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

通過:

//increment `count` if top-left element is true
if  (i > 0 && j > 0 && newGen[i-1][j-1]) count++;

這是我可以想到的最好的方法,即檢查它是否超出范圍,但通常來說,另一種方法(我認為賦予《​​人生游戲》等程序更激動人心的結果)是添加周期性邊界。 基本上,這意味着如果您走出一條邊緣,則最終會到達另一側(就像在pac-man中一樣)。 聽起來很復雜,但實際上只需要%函數,它返回給定兩個數字之間的余數。

所以:

27 % 5 = 2;

因此,要添加周期性邊界,您將像這樣更新x和y位置:

x = (x + xStep + horizontalSize) % horizontalSize;
y = (y + yStep + verticalSize) % verticalSize;

其中xStep和yStep為+1或-1,具體取決於您要走的方向。 (這在for循環中很好用)大小的增加是為了確保您在接近邊界時可以降至零以下。

這樣一來,您就不必擔心混亂的邊界狀況,一切都會重疊。 無需檢查每個邊界。 我希望這是有道理的。 如果沒有,請要求澄清。 我將其更多地用於隨機助步器程序,但想法是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM