我在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 );
}
}
}
}