如果您想生成的數字發生的次數完全相同(與統一分佈不同),那麼有一個更好的方法可以做到這一點。
int n = 2; // your "n"
int t = 100; // how often you want each number x to occur, where 0 <= x < n
// Build a list of numbers
List<Integer> l = new ArrayList<>();
for (int i = 0; i < t; i++) {
for (int j = 0; j < n; j++) {
l.add(j);
}
}
// Shuffle the list randomly; this ensures the order is random but each number x occurs
// as often as any other x
Collections.shuffle(l);
for (Integer value : l) {
System.out.println(value);
}
如果你想有一些數字至少一次,但不關心別人;然後至少插入一個您想要的每個數字,然後隨機選擇其他數字。如果我正確理解你,你至少需要一次數字1,2和3,然後隨機數字1,2和3.所以,那將是:
int n = 3; // your "n"
// Build a list of numbers
List<Integer> l = new ArrayList<>();
for (int x = 1; x <= n; x++) {
l.add(x);
}
int t = 17; // add 17 more random numbers in range 1-3 inclusive
for (int i = 0; i < t; i++) {
l.add(rnd.nextInt(n) + 1);
}
// Shuffle
Collections.shuffle(l);
// Print
for (Integer value : l) {
System.out.println(value);
}
如果你保證它,那麼它是不是隨機的... – irrelephant 2014-11-08 05:06:09
在(離散)均勻分佈中,每個值具有相等的**機會**發生。這並不意味着每個值都會出現相同的時間。你的代碼對於小的「n」沒有任何問題。 – 2014-11-08 05:31:58
你想要它是統一的隨機數,還是你想看到每個數字相等的次數? – immibis 2014-11-08 05:33:30