我现在用这个rand()来解决自己太多的烦恼。
我想在数组中添加1000
随机数,这是我到目前为止所做的,它没有错误,但是rand一直在数组传递中分配相同的数字。随机数的变化我希望它从1到999 ......任何想法都出错了?
顺便说一句,我在ksh中运行...
nawk ' BEGIN{
for (i=0; i<=999; i++) {
srand()
NUMBERS[i]= int(rand()*(999))
print NUMBERS[i]
}
}'
P.S。 对于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,对于任何阅读并遇到同样问题的人来说,解决办法就是在你称之为srand的两个部分之间睡一觉......
答案 0 :(得分:3)
将srand()
调用放在循环之外。对于相同的种子值rand()
,将生成相同的数字序列。没有任何参数的srand()
使用当前时间戳作为种子,并且循环可能恰好使用相同的种子值。因此,您会看到相同的数字。