我有一些代碼應該找到二維數組中8個相鄰單元中最小的一個。當這段代碼運行時,最小的代碼被移動到,並且代碼再次循環運行。然而,當它運行時,代碼最終會導致堆棧溢出錯誤,因爲它會在兩點之間跳轉。這似乎是一個邏輯悖論,好像Y < X然後X! Y.所以它認爲這是我的錯,而不是我的邏輯。這裏是我的代碼:尋找二維數組中的最小鄰居
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;
}
imageX和imageY到底是什麼? – CandiedOrange
如果您正在搜索鄰居並且不包括中心,那麼總會有交換。你應該將'最低'與'map [current.x] [current.y]'進行比較,看看交換點是否真的有必要。 – Fox
imageX和imageY是數組的寬度和高度,由於數據結構的方式,除了一個特殊情況外,每個點總是會有一個較低的值,這個代碼永遠不會在 –