如何生成不重复的随机数

All*_*lil -1 java android

我使用随机数,我正在生成0到7之间的随机数.但是有一个问题:随机数有时会重复前一个数字.
我按下按钮生成一个随机数; 所以当点击按钮我有时真的得到一个不同的随机数,但有时它开始重复数字.举个例子:

单击按钮,有时数字在0-7范围内重复,如:

1-3-4-3-6-3-5-5
正如你所看到的,3重复多次,5也有两次出现.

因此,有两种不同类型的重复.我写了下面的代码,它应该杀死第二次重复(重复5次):

int randomNumber;
do {
    randomNumber = random.nextInt(7 - 0 + 1) + 0;
} while (randomNumber == lastRandomNumber);
lastRandomNumber = randomNumber;
Log.d("RandomNumber","= "+randomNumber);
return randomNumber;
Run Code Online (Sandbox Code Playgroud)

现在我想要的是:

它跟踪最后一个随机数,但现在我想跟踪所有先前生成的随机数.但是我该怎么做呢?实现这一目标的最佳方式是什么?请指导我或分享一些代码.

ash*_*bhy 6

Integer[] arr = {...};
Collections.shuffle(Arrays.asList(arr));
Run Code Online (Sandbox Code Playgroud)

例如 :

List<Integer> ran_num;
      public static void main(String[] args) {
            Integer[] arr = new Integer[1000];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = i;
            }
            Collections.shuffle(Arrays.asList(arr));

            ran_num=new ArrayList<Integer>(Arrays.toString(arr));

        }
Run Code Online (Sandbox Code Playgroud)

可以在以下位置找到abvoe代码:Java生成非重复随机数

从生成的列表中获取一个数字,然后将其删除.下次从同一列表中获取一个号码.

现在,对于每次创建一个额外方法时想要获取新数字的情况:

public static int fetch(){

   int num=ran_num.get(0);
    ran_num.remove(0);

if(ran_num.size()==0)
// call some method to regenerate the list as explained in above code

return num;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是什么以及如何使用? (2认同)