如何使一个随机数生成器不重复数字? 我试过这个,但它一直给我重复的数字
public int random(int a, int b,int c,int d,int e,int f,int g,int h,int i,int j,int k,int l){
Random generator = new Random();
int choice = generator.nextInt(12) + 1;
if((choice!=b)|(choice!=c)|(choice!=d)|(choice!=e)|(choice!=f)|(choice!=g)|(choice!=h)|(choice!=i)|(choice!=j)|(choice!=k)|(choice!=l)){
a=choice;
}
else{
random(a,b,c,d,e,f,g,h,i,j,k,l);
}
System.out.println(choice);
return a;
答案 0 :(得分:2)
这取决于在重复之前它应该生成多少,因为如果你完全禁止所有重复,你必须最终用完。
如果您只需要几打,请创建一系列连续数字并shuffle。
如果您需要更长的序列,则需要在生成序列时记录它们,并且每当您看到重复序列时,请求另一个序列。 HashSet可以在这里做得很好。
答案 1 :(得分:0)
这里有很多这样的例子
Generating Unique Random Numbers in Java
12 Digit unique random number generation in Java
How to have unique random number?
也请查看
http://programminggeeks.com/java-code-for-generating-unique-random-numbers/
答案 2 :(得分:0)
您想要在没有替换的情况下进行采样。将所有a
,b
,...,l
放入大小为List<int>
的内容中。从列表中选择随机元素和删除它们。
答案 3 :(得分:0)
这是一个简单的快速解决方案。当然可能会更好:
import java.util.*;
public class RandomNumberGenerator {
private ArrayList<Integer> usedNumbers;
private Random r;
private int maxNumber;
public RandomNumberGenerator(int maxNumber) {
r = new Random();
usedNumbers = new ArrayList<Integer>();
this.maxNumber = maxNumber;
}
public int next() {
Integer res = r.nextInt(maxNumber);
if (usedNumbers.contains(res)) {
next();
}
usedNumbers.add(res);
if (usedNumbers.size()==maxNumber) {
usedNumbers.clear();
}
return res;
}
}
答案 4 :(得分:0)
|
或评估将检查这些!=
评估中的任何一个是否为真,然后继续a=choice
。
如果您要使用&&
评估,则会检查!=
评估的全部是否为false,如果其中一个是是的,它会跳到你的else
。
所以说你编号你的int a,int b ....作为1,2,... 12-因为你唯一一个不评估不等于的是a,它只会到达{{ 1}}当它们都是1.这是非常奇怪的,看看两个a=choice
是否相等只是为了让它们相等!
上面的其他人已经就如何实际获得非重复随机数给出了很好的选择,所以我将不再重复它们。