[英]Better way to generate unique random numbers in Java
I need unique random ints in specified range. 我需要在指定范围内使用唯一的随机整数。 I use this approch: 我用这个approch:
class Main
{
static final int RANGE = 100;
static int uniqueGenerator(int range_, boolean boolArr_[], Random rand_)
{
int tmpVar = rand_.nextInt(range_);
while (boolArr_[tmpVar] == true)
{
tmpVar = rand.nextInt(range_);
}
boolArr_[tmpVar] = true;
return tmpVar;
}
public static void main(String[] args)
{
Random rand = new Random();
boolean boolArr[] = new boolean[RANGE];
Arrays.fill(boolArr, false);
int ceiling = 10;
int tmp = Main.uniqueGenerator(ceiling, boolArr, rand);
System.out.println(tmp); => 5
ceiling = 20;
tmp = Main.uniqueGenerator(ceiling, boolArr);
System.out.println(tmp); => 17
}
}
It seems to be cumbersome. 这似乎很麻烦。 Maybe someone knows better approach? 也许有人知道更好的方法? EDIT: I use it in game code, so I need most efficient solution. 编辑:我在游戏代码中使用它,所以我需要最有效的解决方案。 Answers below suggest initializing new list, shuffling it => too resource consuming/need to generate new list every time when need to change range. 下面的答案建议初始化新列表,将其洗牌=>太耗费资源/每次需要更改范围时都需要生成新列表。
List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= 100; i++) list.add(i);
Collections.shuffle(list);
Fill an array with the range of numbers you want, shuffle it and extract an item. 使用您想要的数字范围填充数组,随机播放并提取项目。
Edit: Look at Eng.Fouad's example to see how this is implemented. 编辑:查看Eng.Fouad的示例 ,了解它是如何实现的。
Generate and store random numbers in set 生成并存储集合中的随机数
Set<Integer> set = new HashSet<Integer>(100);
Random rand = new Random();
while (set.size() < 1000) {
set.add(rand.nextInt(100));
}
for (Integer integer : set) {
System.out.println(integer);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.