2
我現在用這個rand()調整了很多時間。rand()for for loop在nawk中總是返回相同的值-ksh
我想在數組中添加1000
隨機數,這是迄今爲止我所知道的,它在沒有錯誤的情況下工作,但rand在數組傳遞過程中始終分配相同的數字。隨機數的變化,我希望它是從1到999 ...任何想法最新怎麼了?
BTW我在KSH跑......
nawk ' BEGIN{
for (i=0; i<=999; i++) {
srand()
NUMBERS[i]= int(rand()*(999))
print NUMBERS[i]
}
}'
附: 不是dublicate,沒有其他相同的問題ksh。
修訂
nawk ' BEGIN{
srand(1)
for (i=0; i<=999; i++) {
NUMBERS[i]= int(rand()*(999))
XNUMBERS[i]= int(rand()*(999))
print NUMBERS[i]
print XNUMBERS[i]
}
}'
UPDATE_2
所以工作代碼,我是這個
NUMBERS=`nawk ' BEGIN{
srand()
for (i=0; i<=999; i++) {
printf("%s\n", 100 + int(rand() * (899)));
}
}'`
NUMBERS
#echo $NUMBERS
XNUMBERS=`nawk ' BEGIN{
srand()
for (i=0; i<=999; i++) {
XNUMBERS[i]= 100 + int(rand() * (899));
}
for (i=0; i<=999; i++) {
ver=XNUMBERS[i] "";
rev = "";
for (q=length(ver); q!=0; q--) {
rev = rev substr(ver, q, 1);
}
printf("%s\n", XNUMBERS[i] "|" rev);
}
}'`
我創建了兩種不同的列表,但是RAND()所賜在相同的位置相同的確切數字....我怎麼能讓第二個蘭德給不同不同的數字?????
最後更新
SOOOOO,任何人閱讀和有同樣的問題,解決的辦法就是UE睡眠兩個部分,你調用函數srand之間的1 ....
擰我..那是錯?不能相信它...檢查請更新後的代碼,我把srand從循環中,是否錯誤,如果我加1的值?我用它來說,1是初始值。 – hedgehog
對,時間戳分辨率以秒爲單位,所以只要所有迭代發生在相同的1秒窗口內,循環將在每次迭代中產生相同的值。如果當前時間恰巧在12:00:01到12:00:02之間,或者在循環運行時類似,那麼您會得到2個值。 @hedgehog - 在循環外部移動srand()是正確的事情,但通過使用1的硬編碼種子值,您將否定使用srand()的整個點,即爲rand獲取新的種子值()每次調用腳本時(只要呼叫間隔1秒或更長)。 –
我明白了,但我想我讀到的是你添加到srand的值,所以在這種情況下,我嘗試了1,是隨機數的起始值,所以我看到它就像我說的從隨機數中選擇一個1至999 ...我錯了嗎? – hedgehog