Array Max Min Snakes和Ladders Java

时间:2014-03-13 19:35:21

标签: java arrays console max min

我在控制台上制作蛇和梯子游戏。我试图使它成为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

2 个答案:

答案 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,可能会偶尔导致堆栈溢出。