在c#程式設計中,經常會碰到產生隨機數的情況,並且是在短時間內產生一組隨機數。如果這組隨機數中有大量重複的,則達不到我們的要求。生成隨機數可以用偽隨機數發生器random,受種子控制生成偽隨機數,預設以當前時間值為種子。如果程式執行的很快,就會導致在幾乎同一時刻執行多次,肯定會有重複的。比如我們要生成1到10之間的5個隨機數,則經常會產生 2 2 1 1 1這樣的情況,那麼如何得到非常隨機的不那麼重複的隨機數呢?比如 4 2 3 3 5這樣的。
有人說用thread.sleep(5) ,但我不推薦,因為這樣會使系統減緩執行。
我採取的方法是:用種子guid.newguid().gethashcode(),在短時間裡不會出現大量重複。
以下**中,得到的是1到20之間的10個隨機數(不包括20)。陣列a、b、c分別採用不同的方法產生隨機數,陣列a和b均呼叫了方法randbit,不同的是陣列a多傳了乙個引數i改變隨機數的種子,陣列b用的方法是我在程式設計中經常用到的,即通過呼叫乙個方法來產生隨機數,非常方便。陣列c採用的方法也可以,但在實際程式設計中很少用到。陣列d類似於陣列c,只是產生的是0,1之間的隨機數。
**如下:
[c-sharp]view plain
copy
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
namespace
for(i = 0; i < 10; i++) "+
"] = /r"
, i, a[i]);
} console.writeline("/r"
);
for(i = 0; i < 10; i++) "+
"] = /r"
, i, b[i]);
} console.writeline("/r"
);
for(i = 0; i < 10; i++) "+
"] = /r"
, i, c[i]);
} console.writeline("/r"
);
for(i = 0; i < 10; i++) "+
"] = /r"
, i, d[i]);
} console.readline();
} public
static
intrandbit(
inti,
intj,
intp)
public
static
intrandbit(
inti,
intj)
} }
得到的結果為:
[c-sharp]view plain
copy
a[0] = 8
a[1] = 13
a[2] = 13
a[3] = 17
a[4] = 5
a[5] = 1
a[6] = 15
a[7] = 14
a[8] = 16
a[9] = 3
b[0] = 9
b[1] = 13
b[2] = 11
b[3] = 1
b[4] = 2
b[5] = 15
b[6] = 5
b[7] = 11
b[8] = 6
b[9] = 13
c[0] = 9
c[1] = 16
c[2] = 6
c[3] = 1
c[4] = 1
c[5] = 14
c[6] = 14
c[7] = 12
c[8] = 17
c[9] = 18
d[0] = 0.8177258
d[1] = 0.998677
d[2] = 0.6717096
d[3] = 0.3508099
d[4] = 0.944403
d[5] = 0.7056777
d[6] = 0.1024248
d[7] = 0.2304256
d[8] = 0.1107363
d[9] = 0.5068604
以下是我參考的別人的**:
[c-sharp]view plain
copy
usingsystem;
usingsystem.collections.generic;
usingsystem.text;
namespacetester
", datetime.now.tostring(
"yyyy-mm-dd hh:ss fff"
)));
list>numbers=program.getrandom(1,1000);
for(inti=0; i
console.writeline(string.format("結束時間"
, datetime.now.tostring(
"yyyy-mm-dd hh:ss fff"
)));
console.readline();
}
//////返回一組唯一不重複的隨機數
//////最小值
///最大值
///返回一組唯一不重複的隨機數
publicstaticlist>getrandom(intminvalue,intmaxvalue)
numbers.add(item);
}
returnnumbers;
}
}
}
C 短時間內產生不大量重複的隨機數
在c 程式設計中,經常會碰到產生隨機數的情況,並且是在短時間內產生一組隨機數。如果這組隨機數中有大量重複的,則達不到我們的要求。生成隨機數可以用偽隨機數發生器random,受種子控制生成偽隨機數,預設以當前時間值為種子。如果程式執行的很快,就會導致在幾乎同一時刻執行多次,肯定會有重複的。比如我們要生...
C 短時間內產生大量不重複的隨機數
生成隨機數可以用偽隨機數發生器rand程式設計客棧om,受種子控制生成偽隨機數,預設以當前時間值為種子。如果程式執行的很快,就會導致在幾乎同一時刻執行多次,肯定會有重複的。比如我們要生成1到10之間的5個隨機程式設計客棧數,則經常會產生 2 2 1 1 1這樣的情程式設計客棧況,那麼如何得到非常隨機...
socket短時間內重連需注意的問題
socket短時間內重連需注意的問題 設定好監聽socket後,將socket的屬性設定為可重複使用位址,如 建立監聽socket socketlisten new socket addressfamily.internetwork,sockettype.stream,protocoltype.tc...