我遇到了寻路问题:
开始时间为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";
你能帮我解决这个问题吗?感谢
答案 0 :(得分:2)
首先,您需要使用.equals(.)
进行字符串比较而不是==
。
试试这个老栗子:
How do I compare strings in Java?
之后,您避免重新跟踪步骤的逻辑可能会开始起作用,您可以避免失控的递归。
答案 1 :(得分:0)
使用给定的代码很难说,但有三件事情浮现在脑海中:
[]
转换为+
然后转换为x
?我猜这是为了表明您已经尝试过此单元格,如果是这样,您只能在4 x
次来电之前将其设置为getPath
吗?在4个电话之后进行设置意味着您可能只是继续进入圈子,因此StackOverflow。