我的目標是隨機洗牌數組(從0到9),但每個數字只能在數組中出現一次。我有兩個(工作)想法,但我想知道這個random2方法必須迭代多少次才能達到與第一個方法(random1)相同的隨機性水平。隨機性水平
import java.util.Random;
class RandomStuff {
static Random r;
final static int iteraction = 10;
public static void main (String[] args) {
r = new Random();
int[] array = new int[10];
random1(array);
random2(array, iteraction);
}
static void random1(int[] array) {
for(int i = 0; i < array.length; i++) pole[i] = -1;
for(int i = 0; i < array.length; i++) {
while(true) {
int y = r.nextInt(10);
if(!find(array, y)) {
array[i] = y;
break;
}
}
}
}
static void random2(int[] array, int iteraction) {
for(int i = 0; i <= iteraction; i++) {
int y1 = r.nextInt(array.length);
int y2 = r.nextInt(array.length);
int p = array[y1];
array[y1] = array[y2];
array[y2] = p;
}
}
static boolean find(int[] array , int value) {
for(int i = 0; i < array.length; i++) {
if(pole[i] == value) return true;
}
return false;
}
}
第一種方法(random1)的工作原理的隨機數和檢測的分配,如果它們是/不是陣列中已經。這對我來說似乎很隨意。
第二種方法(random2)用於交換數組中的兩個隨機值。所以問題是,我需要多少次交換數組中的兩個數字才能達到相同的隨機性水平。 (或者變量迭代有什麼價值)。
感謝您的回覆。
也許你應該使用[Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)。 – Kevin
我不明白你的「雙重隨機性」的目的。如果第一種方法爲每個元素分配一個隨機數,那麼通過在第二個函數中對它們進行洗牌,還能獲得哪些額外的好處? – aliteralmind
我猜你可以簡單地將數字從0到9分配到數組中,然後將其重新排序。 – Karura91