我的递归方法在到达方法结束后不会停止

时间:2017-12-11 13:58:32

标签: java

我想从north(x=10,y=0)west(x=0,y=10)east(x=20,y=10)south(x=10,y=20)的起始位置生成一些随机坐标。 (对于一个随机的dungeongenerator,只是为了一个有希望的有趣的项目; ^))

private void generateDungeon(int x, int y, int groesse) {

    //System.out.println("groesse: " +groesse);
    int tempX = this.neueKoordinaten.nextInt(2);
    int tempY = this.neueKoordinaten.nextInt(2);

    if(tempX == 0 && tempY== 0) {
        this.generateDungeon(x, y, groesse);
    }
    if(tempY==1) {  
        y = y + (1 * this.yFaktor);
    }else if(tempX == 1) {
        x = x + (1 * this.xFaktor);
    }

    this.aktuelleKoordinaten = new Point(x,y);
    //System.out.println("aktuelleKoordinaten: " +this.aktuelleKoordinaten);
    this.koordinatenListe.add(this.aktuelleKoordinaten);

    groesse++;

    if(groesse <= 4) {
        System.out.println("???" + groesse);
        this.generateDungeon(x, y,groesse);
    }   
    System.out.println("test");
}

我想,在我的“groesse”(大小)到达某一点(在这种情况下为4)之后,我的方法将停止调用自己,但事实并非如此。

由于某些原因,它在到达方法的终点(testoutput)后继续跳回到tempY==1的if。 有时20次,有时只有一次或两次 我真的不明白这种行为。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果我认为this.neueKoordinaten.nextInt(2)在0和1之间生成一个随机int,那么就比你有25%的命中率

if(tempX == 0 && tempY== 0) {
    this.generateDungeon(x, y, groesse);
}
每次运行方法时都会显示

代码段。当它没有击中时,它运行4或5次(取决于你是否用0或1开始groesse)。但是,如果确实如此,那么这一行就是你的新起点,在继续它正在做的事情之前,它将运行4到5次(可能更少,取决于groesse值),导致不可预测执行数量。

根据评论判断,你想要的只是再次重新注册,而不是再次启动整个功能:

while(tempX == 0 && tempY == 0){
    tempX = this.neueKoordinaten.nextInt(2);
    tempY = this.neueKoordinaten.nextInt(2);
}

或者,如果您希望再次重新启动,请指示此分支已完成:

if(tempX == 0 && tempY== 0) {
    this.generateDungeon(x, y, groesse);
    return;
}

答案 1 :(得分:2)

很难从这个片段看到完整的故事,但看起来你的第一个if语句正在传递,而你正在调用generateDungeon而不增加groesse。这可以解释为什么看起来代码如果(tempY == 1)“跳回”到下一行,因为这是方法调用之后的第一行。

我建议逐步调试方法,跟踪groesse以及tempx / tempy的值