我正在创建一个小游戏,您需要在地图上移动部队。要检测是否可以完成移动,我必须验证是否有2个方块之间的方法。 因此,递归地从一个方块开始,取四个方块(上面,下面,左边和右边)以及以下条件递归地重复测试,因为我只得到死角或目标方块。所有广场必须在玩家的控制之下。Android:堆栈溢出错误 - 递归太深
有一个在我的课堂案例我的递归代码实现:
public boolean isContiguJoueur(Case case_origine, Case case_destination, Case[] cases) {
boolean haut_true=false, droite_true=false, bas_true=false, gauche_true=false;
// Above
if(this.haut!=null) {
if(haut.joueur==this.joueur && this.haut!=case_origine) {
if(this.haut==case_destination) {
return true;
}
haut_true=haut.isContiguJoueur(this,case_destination, cases);
}
}
// ...
// Same code than Above, only variables names change
// ...
return haut_true||droite_true||bas_true||gauche_true;
}
- 的类名方:案例
- 地图数据:案例[]的情况下
- 玩家ID: joueur
- 上面的情况下:HAUT
即共在小地图上工作得很好(〜50到100格)。但我得到这个更大的:
08-25 11:26:31.912: E/AndroidRuntime(5497): FATAL EXCEPTION: main
08-25 11:26:31.912: E/AndroidRuntime(5497): java.lang.StackOverflowError
08-25 11:26:31.912: E/AndroidRuntime(5497): at mypackage.isContiguJoueur(Case.java:xxx)
... x 100
对不起,我英语不好,谢谢你的帮助! :-)
编辑:我忘了。为了避免大规模无用的递归测试,我已经这样做:
if(this.droite!=null && !haut_true) {
// ...
if(this.bas!=null && !haut_true && !droite_true) {
// ...
if(this.gauche!=null && !haut_true && !droite_true && !bas_true) {
// ...
@Jonathan其实,我认为[stack-overflow]在这里是正确的标签。 –
@AndrewBarber,谢谢,都加了。我正在编辑一个错误标记为[tag:overflow]的帖子的整个负载,并认为这是java特定的,我会使用java异常类型,但是在反思中我同意更通用的标记至少与此相关。 –