将随机数存储在数组中而不相邻重复

时间:2014-05-19 21:51:48

标签: java arrays for-loop random

我想将随机数存储在数组中而不重复,范围为0-9。如果他们重复,但没有,如果他们正好相邻,那就没关系了:1577984是不正确的(因为双7s)但理论上151515没问题。

我已经在这一天或两天工作,这是我原来的基本代码:

public static int[] createRandomNumber(int characters){
    int randomNumberArray[] = new int[characters];
    for(int i =0; i<characters; i++){
        randomNumberArray[i] = (int)(Math.random()*9);
    }
    return randomNumberArray;
 }

这就是我现在所拥有的,但它与我想要的完全相反,产生了所有相同的数字:

public static int[] createRandomNumber(int characters)
{
    int randomNumberArray[] = new int[characters];
    int random = (int)(Math.random()*9);
    for(int i = 0; i <characters ; i++)
    {
        randomNumberArray[i] = random;
        if(randomNumberArray[i] == random)
            randomNumberArray[i] = (int)(Math.random()*9);
        else if(randomNumberArray[i] != random)
            randomNumberArray[i] = random;
    }
    return randomNumberArray;
}

我有没有看到一个简单的解决方案?我可能会重写这种方法50次 只是你知道参数代码是

int characters = in.nextInt();

所以只需要他们想要的随机生成密码的长度。另外我知道Math.random是伪随机的,但这不是真实的或任何东西。此外,还有更多方法可以生成随机字母,例如井。 (是的,我做了很多研究,但没有人似乎有我的特殊问题,相信我提出问题对我来说是最后的选择。)

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

for循环中,您将random分配给数字数组。但是,您会立即检查random是否等于您刚刚分配的那个点,即true。因此它会选择另一个随机数,也可能与前一个数字相等或不同。

我已经重写了for循环,在其正文中有一个while循环,以便继续检查之前的数字以查看是否有重复的数字。

for(int i = 0; i <characters ; i++)
{
    randomNumberArray[i] = random;
    // If not first, check if it matches the previous digit
    while(i >= 1 && randomNumberArray[i - 1] == random)
    {
        random = (int)(Math.random()*9);
        randomNumberArray[i] = random;
    }
}

答案 1 :(得分:0)

这是另一种基于do-while的可能解决方案:

class TestArrayGen {
   public static int[] createRandomNumber(int characters) {
      int randomNumberArray[] = new int[characters];
      randomNumberArray[0] = (int)(Math.random() * 10);
      for(int i = 1; i < characters; i++) {
         do {
            randomNumberArray[i] = (int)(Math.random() * 10);
         } while(randomNumberArray[i] == randomNumberArray[i-1]);
      }
      return randomNumberArray;
   }

   public static void main(String[] args) {
      for(int number : createRandomNumber(20)) {
         System.out.print(number + " ");
      }
      System.out.println();
   }
}

请注意,我也将乘数提升至10,否则你永远不会得到9。