我有一些代码应该在2D数组中找到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;
}
您需要停下来的情况。
在2D阵列中找到8个相邻单元中的最小单元。运行此代码时,最小的代码将移至该代码,然后再次在循环中运行
是一个很好的开始方式,但对停止却一言不发。
您是否关心当前单元格的价值?如果是这样,您需要检查9而不是8。如果您只是想下山,则需要检查您去过的地方,否则任何平坦的多单元谷都会使您陷入无限循环。仅考虑向下移动。
如果您真的不在乎自己在哪里,那么即使您跳入或跳出单个细胞谷,也将使您陷入无限循环。在这种情况下,您将需要其他一些停止条件。考虑在imageX * imageY
迭代后停止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句