2017-02-15 28 views
-1

我在java中 (例如)一個二維數組如何看待Java數組的相對邊緣,好像他們是相鄰

0|0|0|0 
1|1|1|0 
0|1|0|1 

我需要創建代碼,如果說在廣場周圍的項目是什麼,做點什麼。我可以做到這一點,但我有一個問題。

如果項目位於邊緣上,則數組需要有效包裝,以便頂行緊挨着底行。

有誰知道如何做到這一點?

+0

尚不清楚爲什麼它需要包裝。什麼是「正在做某事」。 – RealSkeptic

+0

你似乎自相矛盾,你說你可以在廣場周圍找到物品,但是說明你找不到邊上的物品?如何找到廣場周圍的東西,並找到不同的邊緣項目? –

+1

等等...你問你如何對待陣列,好像相對的邊緣相鄰? –

回答

0

首先,確定您對4連接鄰域還是8連接感興趣。 4連接的鄰域是單元格上方,左側,右側和下方的單元格。 8連接的鄰域是相同的單元加對角線。

現在,您只需要一種方法來計算特定單元格的索引。

下面是計算另一個左側列索引的示例。

int getLeftIndex(int index, int width) { 
    int rv = index - 1; 
    if (index < 0) { index = width - 1; } 
    return rv; 
} 

類似的方法可以計算出列索引到右邊,或行索引的上方或下方。

調用兩種方法來獲取適當的行和列。

您也可以將其推廣以提供一種方法,可以在任一方向接受增量,以便您可以遍歷單元格。

public static int getCoord(int from, int delta, int size) { 
    return Math.floorMod(from + delta, size); // Requires Java 8 
} 

Java也提供一個模運算符,但它won't give you the results you want

這裏的遍歷各地另一個8連接的電池的一個例子:

public static void main(String[] args) { 
    int x = 0; 
    int y = 0; 
    int size = 4; 

    for (int i = -1; i <= 1; ++i) { 
     for (int j = -1; j <= 1; ++j) { 
      if (i != 0 || j != 0) { 
       int xij = getCoord(x, i, size); 
       int yij = getCoord(y, j, size); 
       System.out.println("x=" + xij + " y=" + yij); 
      } 
     } 
    } 

}