我在控制台上制作蛇和梯子游戏。我试图使它成为ladderBottoms总是小于ladderTops。但是我一直遇到错误。 我一直在尝试的代码是一种递归方法,它可以重做方法直到它正确...
public static void ladders() {
for (int i = 0 ; i < 6 ; i++){
ladderBottoms [i] = (int) ((Math.random () * 80)+1);
ladderTops [i] = (int) ((Math.random () * 80)+1);`
if(ladderBottom[i] > ladderTop[i])
ladders();
}//for
}//ladders
答案 0 :(得分:0)
不要递归整个方法,只需再次重试randoms。
public static void ladders()
{
for (int i = 0 ; i < 6 ; i++)
{
do{
ladderBottoms [i] = (int) ((Math.random () * 80)+1);
ladderTops [i] = (int) ((Math.random () * 80)+1);
}while(ladderBottom[i] >= ladderTop[i]);
}//for
}//ladders
未经测试。
答案 1 :(得分:0)
此代码不好。您正尝试在每次递归时从头开始重新生成整个数组!实际上,成功生成梯子的概率大约是1/64。
如果我是你,我会放弃递归并调整循环:
public static void ladders() {
for (int i = 0 ; i < 6 ; ){
ladderBottoms [i] = (int) ((Math.random () * 80)+1);
ladderTops [i] = (int) ((Math.random () * 80)+1);
if(ladderBottom[i] <= /*do you really want =*/ ladderTop[i]){
i++; /* this is OK so increment; else have another go*/
}
}//for
}//ladders
for
循环中的空表达式在Java中完全合法。
请注意我在代码中的评论。你真的想要一个单位长的梯子吗?如果没有,请将条件中的<=
替换为<
。
根据经验,总是尽量避免使用递归函数:它们在凌晨3点的调试会话中很难遵循,特别是对于ramdomisation,可能会偶尔导致堆栈溢出。