Во-первых, укажите, интересуетесь ли вы 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);
}
}
}
}
Не понятно, почему это нужно обернуть. И что именно «делают что-то» точно. – RealSkeptic
Вы, кажется, противоречите себе, вы говорите, что можете найти предметы вокруг площади, но затем заявить, что вы не можете найти предметы на краю? как найти что-то вокруг площади и найти элемент на краю другого? –
Подождите ... вы спрашиваете, как вы обрабатываете массив, как если бы противоположные края были смежными? –