gpt4 book ai didi

java - 我的递归方法在到达方法末尾后不会停止

转载 作者:行者123 更新时间:2023-12-01 16:47:22 25 4
gpt4 key购买 nike

我想从北(x=10,y=0)、西(x=0,y=10)的起始位置生成一些随机坐标、东(x=20,y=10)南(x=10,y=20)。 (对于随机地牢生成器,只是为了一个希望有趣的项目;^))

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)后,我的方法将停止调用自身,但事实并非如此。

由于某些原因,在到达方法的终点(测试输出)后,它会不断跳回带有 tempY==1 的 if。
有时20次左右,有时只有一两次。
我真的不明白这种行为。

我做错了什么?

最佳答案

如果我的想法是正确的,this.neueKolinedn.nextInt(2) 会生成一个 0 到 1 之间的随机整数...那么你就有 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;
}

关于java - 我的递归方法在到达方法末尾后不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47754540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com