我在使用此方法时遇到一些麻烦,得到一个StackOverFlowError。我正试图从这个页面Puff Ball
自动解决这些谜题<tr>
<td>__data1__</td>
<td>
<a href="javascript:void(0)" onclick="callFunctionA('__data2__');">click me</a>
</td>
</tr>
它可以在每个调用问题中通过电路板吗?它有下一个变量:
public static boolean backtrackingPuffBalls(Board board, int[] steps, int ball,int index){
if(!(checkValidPosition(board))){
if(checkSolution(board)){
numberSolutions++;
solutions[numberSolutions] = steps;
}
else{
return false;
}
}
else{
while(ball<board.getNumObjectives()+1){
puffBall(board, ball);
if(backtrackingPuffBalls(board, steps, ball, index++)){
return true;
}
else{
ball++;
index--;
}
}
}
return false;
}
包含方法的代码:
int[][] board;
int numObjectives;
boolean solvable, solved;
int[] movements;
boolean valid;
Coordinates[] objectives;
Coordinates[] balls;
“solutions []”和“numberSolutions”是全局变量 我想我可以修复“board.getBoard()”代码,但它不应该影响回溯
答案 0 :(得分:2)
您看到StackOverFlowError
的原因是您正在对backtrackingPuffBalls()
方法进行无限次的递归调用。我预计会出现else
条件不断发生的情况,并且每次调用最终都会进行另一次递归调用。
要解决此问题,您需要整理逻辑并确保递归在适当的时间结束。
调试器是你最好的朋友,你可以通过单步调试代码来了解发生了什么。