您正在有效地查找從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