如何将 Java 数组的相对边缘视为相邻边缘



我在java中有一个2D数组(示例)

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

我需要创建代码,说如果广场周围的项目是某件事,请做某事。我可以做到这一点,但是我有一个问题。

如果项目在边缘上,则数组需要有效地包装,以便顶行在底行旁边。

有人知道该怎么做吗?

首先,确定您对4连接社区还是8点连接感兴趣。四连接的邻域是上方,左,右和下方的单元。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还提供了一个模量操作员,但不会给您带来想要的结果。

这是在另一个围绕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 );
            }
        }
    }
}

最新更新