寻路 - StackOverflowError

时间:2015-05-20 09:26:50

标签: java recursion stack-overflow path-finding

我遇到了寻路问题:

开始时间为0,0,结束为" C"在右下角。它抛出exeption java.lang.StackOverflowError

if(getPath(x, y+1)==true){ 
        return true;
    }

if(getPath(x, y-1)==true){ 
        return true;
    }

这是方法

public static boolean getPath(int x,int y, int num){


    if(x==startX-1|| y==startY-1 || x==endX+1 || y==endY+1){
        return false;
    }

    if (" C".equals(array[x][y])){
        return true;
    }

    if ("# ".equals(array[x][y])||"x".equals(array[x][y])){
        return false;
    }

    if ("[]".equals(array[x][y])){
        array[x][y]="+";
    }

    if(getPath(x, y+1,num)==true){ //vpravo
        return true;
    }

    if(getPath(x+1, y,num)==true){ //dolu
        return true;
    }
    if(getPath(x-1, y,num)==true){ //nahoru
        return true;
    }
    if(getPath(x, y-1,num)==true){ //vlevo
        return true;
    }

    if("+".equals(array[x][y])){
        array [x][y]="x";
    }

    return false; 

}


}

我使用的值

public static Random r = new Random();
public static int i1 = r.nextInt(4) + 4;

public static int startX=0;
public static int startY=0;

public static int endX=i1-1;
public static int endY=i1-1;
public static int rows = i1;
public static int columns = i1;
public static String[][] array = new String[rows][columns];

我有i3-i14用于定义的随机障碍

public static int i3 = r.nextInt(4) ;
...
public static int i14 = r.nextInt(4) ;

在我改变了比较后,stil抛出了这个例子

编辑:我想我已经找到了问题。当IF比较" +"并将其替换为" x"

if("+".equals(array[x][y])){
        array [x][y]="x";
你能帮我解决这个问题吗?感谢

2 个答案:

答案 0 :(得分:2)

首先,您需要使用.equals(.)进行字符串比较而不是==

试试这个老栗子:

How do I compare strings in Java?

之后,您避免重新跟踪步骤的逻辑可能会开始起作用,您可以避免失控的递归。

答案 1 :(得分:0)

使用给定的代码很难说,但有三件事情浮现在脑海中:

  1. 您确定要添加C和所有其他数据吗?
  2. 周围是否有额外的空间" C"和"#"应该在那里?
  3. 为什么您将[]转换为+然后转换为x?我猜这是为了表明您已经尝试过此单元格,如果是这样,您只能在4 x次来电之前将其设置为getPath吗?在4个电话之后进行设置意味着您可能只是继续进入圈子,因此StackOverflow。