您正在有效地查找从0
到n-1
的整数的随机排列。
你可以把这一数字从0
到n-1
到ArrayList
,然后在名单上调用Collections.shuffle()
,然后从列表中逐一获取的数字:与发生的所有排列
final int n = 4;
final ArrayList<Integer> arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i);
}
Collections.shuffle(arr);
for (Integer val : arr) {
System.out.println(val);
}
Collectons.shuffle()
保证同等可能性。
如果你愿意,你可以封装此为Iterable
:
public class ChooseUnique implements Iterable<Integer> {
private final ArrayList<Integer> arr;
public ChooseUnique(int n) {
arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i);
}
Collections.shuffle(arr);
}
public Iterator iterator() {
return arr.iterator();
}
}
当你遍历这个类的一个实例,它会产生一个随机排列:
ChooseUnique ch = new ChooseUnique(4);
for (int val : ch) {
System.out.println(val);
}
在一个特定的运行,这打印出1 0 2 3
。
来源
2012-03-29 10:53:15
NPE
请显示你写的代码。 – 2012-03-29 10:44:57
您是从4组数字中选择4个随机数字(没有替换)?你真的想达到什么目的?你只是试图随机化数字0-3的序列? – 2012-03-29 10:51:10
它实际上是一个功能不是整个程序,不试图随机我想要如果我从数组中选择一个元素,它不会再选择它 – ray 2012-03-29 11:02:23