我使用随机数,我正在生成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)
现在我想要的是:
它跟踪最后一个随机数,但现在我想跟踪所有先前生成的随机数.但是我该怎么做呢?实现这一目标的最佳方式是什么?请指导我或分享一些代码.
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)
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |