我想从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次,有时只有一次或两次
我真的不明白这种行为。
我做错了什么?
答案 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的值