【发布时间】:2011-10-11 11:03:50
【问题描述】:
谁能告诉我如何生成不重复的随机数 例子
随机 (10) 应该(可能)返回 3,4,2,1,7,6,5,8,9,10 且不重复
谢谢
【问题讨论】:
谁能告诉我如何生成不重复的随机数 例子
随机 (10) 应该(可能)返回 3,4,2,1,7,6,5,8,9,10 且不重复
谢谢
【问题讨论】:
我建议将数字添加到ArrayList<Integer>,然后使用Collections.shuffle() 随机化它们的顺序。像这样的:
ArrayList<Integer> number = new ArrayList<Integer>();
for (int i = 1; i <= 10; ++i) number.add(i);
Collections.shuffle(number);
【讨论】:
制作一个生成的数字列表,当你新生成的数字已经在这个列表中时,你就制作一个新的随机数。
Random rng = new Random(); // Ideally just create one instance globally
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < numbersNeeded; i++)
{
while(true)
{
Integer next = rng.nextInt(max) + 1;
if (!generated.contains(next))
{
// Done for this iteration
generated.add(next);
break;
}
}
}
【讨论】:
我的两分钱
public Collection<Integer> getRandomSubset(int max,int count){
if(count > max){
throw new IllegalArgumentException();
}
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0 ; i < count ;i++){
list.add(i);
}
Collections.shuffle(list);
return list.subList(0, count);
}
【讨论】:
subList() 增强功能 - 非常适合从一副牌中分发一手牌
如果只有几个数字,小于 100,我想我的解决方案可以是创建一个布尔数组,一旦你得到一个数字,将数组的位置设置为 true。我不认为所有数字都出现需要很长时间。希望对您有所帮助!
干杯!
【讨论】: