我现在用这个 rand() 困扰了自己太多时间。
我想在数组中添加1000
随机数,这是我到目前为止所拥有的,它工作没有错误,但 rand 始终在传递的数组中分配相同的数字。我希望随机数的范围从 1 到 999...有什么想法出了什么问题吗?
顺便说一句,我正在 ksh 中运行...
nawk ' BEGIN{
for (i=0; i<=999; i++) {
srand()
NUMBERS[i]= int(rand()*(999))
print NUMBERS[i]
}
}'
附注 不是重复的,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() 在同一位置给出了两个完全相同的数字....我怎样才能使第二个 rand 给出不同的数字??????
最终更新
Sooooo,对于任何阅读并遇到同样问题的人来说,解决方案是在您称为 srand 的两个部分之间使用 sleep 1....
最佳答案
将 srand()
调用置于循环外部。对于相同的种子值,rand()
将产生相同的数字序列。不带任何参数的 srand() 会使用当前时间戳作为种子,并且循环可能碰巧使用相同的种子值。因此,您会看到相同的数字。
关于unix - nawk 中的 for 循环中的 rand() 始终返回相同的值 -ksh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36766328/