解決for迴圈裡面產生相同隨機數的問題

2021-06-28 17:18:32 字數 522 閱讀 1084

一般使用random ra=new random();就可以。。

但是如果應用在乙個for迴圈中,取到的多個隨機值就基本相同了。原因如下:

用系統時間做隨機種子並不保險,如果應用程式在乙個較快的計算機上執行,則該計算機的系統時鐘可能沒有時間在此建構函式的呼叫之間進行更改,random 的不同例項的種子值

可能相同

解決思路: 迴圈體中加thread.sleep(1);

----------

這樣就使得迴圈中的時間不同了,然後取ticks,擷取後9位為int做種子,保證每次種子不同,可取到隨機值 。。

thread.sleep(1);

long tick = datetime.now.ticks;//乙個以0.1納秒為單位的時間戳,18位

int seed = int.parse(tick.tostring().substring(9)); //  int型別的最大值:  2147483647

-------

for (int i = 0; i < 20; i++)

c c 隨機數產生相同解決方案

謹記srand 不要呼叫兩次或兩次以上。void main for int i 0 i 10 i srand unsigned time null cout 這樣呼叫的時候,因為cpu高速的關係,呼叫的srand unsigned time null 生成的種子數一樣。導致rand 產生的隨機數也一...

Random快速連續產生相同隨機數的解決方案

random快速連續產生相同隨機數的解決方案 第一種方式 使用datetime.now.ticks生成隨機數 優缺點 如果觸發random函式間隔時間很短,就有可能造成產生一樣的隨機數 第二種方式 使用thread.sleep 在每次迴圈產生隨機數前延遲幾個毫秒,防止由於計算機運算速度過快,產生偽隨...

Random快速連續產生相同隨機數

random類是乙個產生偽隨機數字的類,它的建構函式有兩種,乙個是直接new random 另外乙個是new random int32 前者是根據觸發那刻的系統時間做為種子,來產生乙個隨機數字,後者可以自己設定觸發的種子,一般都是用uncheck int datetime.now.ticks 做為引...