У меня есть код, который должен найти самую маленькую из 8 соседних ячеек в 2D-массиве. Когда этот код запускается, самое маленькое затем перемещается в, а код запускается снова в цикле. Однако, когда он запускается, код заканчивается тем, что приводит к ошибке переполнения стека, поскольку он продолжает прыгать между двумя точками. Кажется, это логичный парадокс, как если бы Y < X, тогда X! < Y. Поэтому он думает, что это мой код в вине, а не моя логика. Вот мой код:Поиск наименьшего соседа в 2D-массиве
private Point findLowestWeight(Point current) {
float lowest = Float.MAX_VALUE;
Point ret = new Point(-1, -1);
LinkedList<Point> pointList = new LinkedList<Point>();
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (!(i == 0 && j == 0)) {
if ((current.x + i >= 0 && current.x + i <= imageX - 2)
&& (current.y + j >= 0 && current.y + j <= imageY - 2)) {
pointList.add(new Point(current.x + i, current.y + j));
}
}
}
}
for (Point p : pointList){
if (map[p.x][p.y] < lowest){
lowest = map[p.x][p.y];
ret = p;
}
}
return ret;
}
Для чего предназначены изображенияX и imageY? – CandiedOrange
Если вы ищете через соседей и исключая центр, то всегда будет обмен. Вы должны сравнить 'lower' с' map [current.x] [current.y] ', чтобы увидеть, действительно ли необходим обмен точками. – Fox
imageX и imageY - это ширина и высота массива, из-за того, что структурированы данные, всегда будет меньшее значение для каждой точки, за исключением одного специального случая, который этот код никогда не запускается на –