2013-07-22 60 views
0

我試圖產生兩個隨機數組。一個用於高度的陣列,另一個用於文本藝術魚缸的寬度。但是數組總是具有相同的重複數字。隨機編號數組給出了相同的數字

EX:2,2,2,2]或[9,9,9]

我一定要正確建立循環,但我需要幫助,看看有什麼是錯的。

//Generate random numbers for fish positions in vector 
    if (fish_collection.size() != 0) 
    { 
     int randHeight[fish_collection.size()]; 
     int randWidth[fish_collection.size()]; 

     for (int i = 0; i < fish_collection.size(); i++) 
     { 
      srand (time(NULL)); 
      randHeight[i] = rand() % 10 + 1; 
      randWidth[i] = rand() % (tank_size - 5) + 1; 
     } 

     //random number printed test 
     for (int i = 0; i < fish_collection.size(); i++) 
     { 
      cout << randWidth[i] << ','; 
     } 
     cout << endl; 

     //Enter the fish in random position 
     for (int j = 0; j < fish_collection.size(); j++) 
     { 
      tank_frame[randHeight[j]].replace (randWidth[j], fish_collection[j].size(), fish_collection[j]); 
     } 
    } 

回答

2

你(通常在主要的開始)來調用srand(time(NULL))僅在程序一次。

多次調用我相信重置整個序列,這就解釋了爲什麼每次總是得到相同的數字(第一個)。 (而且你總是得到第一個相同的原因,那就是很可能這些通話非常接近,時間是一樣的)。

'time(NULL)'返回自1970年1月1日00:00以來的秒數,這就解釋了爲什麼'srand(time(NULL))'總是種子到相同的值:它在不到一秒內執行,所以time(NULL)返回相同的值。 (見link

+0

這是正確的,或者至少如果不是完全正確,那就是效果srand具有 - 重置序列。 我不太明白爲什麼,但隨着時間的不同,以後...好...時間... – user3728501

+0

@EdwardBird如果程序運行得相當快,標準的微秒時間可能沒有機會「勾選」。 – hexafraction

+0

問題在於time()返回自epoch以秒爲單位的當前時間,所以很可能在相對較少的迭代次數中,每次都會得到相同的時間(因此也是相同的「隨機」種子)呼叫。 –

0

您每次撥打電話rand()時都會致電srand()功能。這是不正確的:srand()應該只在程序開始時使用一次,因爲您傳遞給它的值將設置更多rand()值的整個序列。在這個例子中,您總是使用相同的參數呼叫srand()(因爲時間更新並不經常),因此rand()序列總是相同的,因此調用rand()總是返回相同的值。