2015-08-15 74 views
1

我正在創建1到15個「隨機」數字的列表,但沒有任何重複。我已經創建了一個數組,並希望存儲每個數字,但無法弄清楚如何執行此操作。我已經創建了隨機列表並將它們存儲在數組中,但無法確保沒有重複。任何幫助,將不勝感激。我的代碼如下:創建沒有重複的隨機數字列表

int[] myList = new int[15]; 
    Random random = new Random(); 

    for (int i = 0; myList.Length; i++) 
    { 
    myList[i] = random.Next(1, 15); 
    } 
+0

可能重複http://stackoverflow.com/questions/1519736/random-shuffling-of-an-陣列) – user140547

回答

1

因爲你的列表的大小是相等的可能值,你可以在正常的秩序創建列表:

int[] myList = new int[15]; 
for (int i = 0; i < myList.Length; i++) 
{ 
    myList[i] = i + 1; 
} 

然後洗牌它,例如,通過對每一個條目和排序由值分配隨機值:

Random random = new Random(); 
myList = myList.OrderBy(a => random.Next()).ToArray(); 
0

可以使用Fisher–Yates shuffle做到這一點。

示例實現:

int n = 15; 
int[] myList = new int[n]; 
Random random = new Random(); 

for (int i = 0; i < n; i++) 
{ 
    myList[i] = i + 1; 
} 
for (int i = n - 1; i >= 1; i--) 
{ 
    int j = random.Next(1, i); 
    int temp=myList[i]; 
    myList[i]=myList[j]; 
    myList[j]=temp; 
} 
0

你需要得到正確的算法。

開始從i = 15

挑選來自1的隨機數爲i。

將它追加到列表中。

用第(i-1)個索引進行交換。

將i減1。

重複上述步驟。

爲上述代碼可以是:

int[] myList = new int[15]; 
int[] original_list = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
    Random random = new Random(); 

    for (int i = myList.Length; i>=0; i--) 
    {int randNo = random.Next(0, i-1); 
    myList[i] = original_list[randNo]; 
    swap(original_list[i-1],original_list[randNo]); //your swap method 
    } 
[陣列的隨機洗牌(的