Java 我的递归方法没有';t到达方法末尾后停止

Java 我的递归方法没有';t到达方法末尾后停止,java,Java,我想从北部(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.neuekoordinaren.nextInt(2); int tempY=thi

我想从
北部(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.neuekoordinaren.nextInt(2);
int tempY=this.neueKoordinaten.nextInt(2);
if(tempX==0&&tempY==0){
这是生成的(x,y,groesse);
}
如果(tempY==1){
y=y+(1*this.yFaktor);
}else if(tempX==1){
x=x+(1*this.xFaktor);
}
this.aktuellekoordien=新点(x,y);
//System.out.println(“aktuellekoordien:+this.aktuellekoordien”);
this.koordinante.add(this.aktuellekoordinaen);
groesse++;

if(groesse很难从这段代码中看到完整的故事,但它看起来像是您的第一条if语句正在传递,并且您正在调用generatedingeon而没有增加groesse。这可以解释为什么代码看起来像是“跳回到”下一行if(tempY==1),因为这是方法调用后的第一行


我建议一步一步地调试这个方法,跟踪groesse和tempx/tempy的值,很难从这段代码中看到完整的故事,但是看起来好像你的第一个if语句正在传递,你在调用GeneratedAngeon时没有增加groesse。这可以解释为什么代码看起来是如果(tempY==1),则“跳回到”下一行,因为这是方法调用后的第一行


如果我认为
this.neuekoordinaren.nextInt(2)
会生成一个介于0和1之间的随机整数,那么我建议通过该方法一步一步地进行调试,跟踪groesse以及tempx/tempy的值

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;
}

如果我认为
this.neueKoordinaten.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;
}

我知道,那是因为如果tempX==0&&tempY==0,生成器必须再试一次(因为我无法从中获得新的坐标)this.neueKoordinaten.nextInt(2)
do以及它返回
0
的可能性有多大?它返回0或1。我想在y轴或x轴上存档movemont,但不能同时在这两个轴上存档。(我更喜欢y轴上的移动,这就是为什么它优于if(x==1)事情是这样的,我认为它几乎有一半的时间返回零,但无法确认。从未测试过它;所以你有25%的概率得到0/0并开始递归下降?你所描述的“向后跳”可能是该方法的一个新的递归调用。在调试器中逐步检查它,并观察堆栈在每次返回时是如何增长的。”我知道,那是因为如果tempX==0&&tempY==0,生成器必须再试一次。(因为我无法从中获得新的坐标)this.neueKoordinaten.nextInt(2)的作用是什么do以及它返回
0
的可能性有多大?它返回0或1。我想在y轴或x轴上存档movemont,但不能同时在这两个轴上存档。(我更喜欢y轴上的移动,这就是为什么它优于if(x==1)事情是这样的,我认为它几乎有一半的时间返回零,但无法确认。从未测试过它;所以你有25%的概率得到0/0并开始递归下降?你所描述的“向后跳”可能是该方法的一个新的递归调用。在调试器中逐步检查它,并观察堆栈在每次返回时是如何增长的。”Hi,我尝试了allready。问题是(我应该提到这一点)在我到达testoutput之后,它调用testoutput几次,然后再跳回if(tempY==1)。直到我的groesse>4,它的工作方式完全符合我的预期。但在那之后,它就不再工作了。发布所有代码是否会有帮助?嗨,我尝试了allready。问题是(我应该提到这一点)在我到达testoutput之后,它会调用testoutput几次,然后再跳回到if(tempY==1).直到我的groesse>4,它的工作方式才完全符合我的预期。但在那之后,它就不再工作了。发布所有代码会有帮助吗?杰普,那是我的错误。我刚刚发现了同样的问题。我不知道如果重新启动函数,就必须结束函数的其余部分。我想,如果我调用我的函数递归,函数的其余部分就不会ion终止了。回答得好,好先生;^)Jep,那是我的错误。我刚刚发现了同样的错误。我不知道如果你重新启动函数,你必须结束函数的其余部分。我认为