2016-04-21 2 views
2

Я слишком беспокоюсь о себе с этим rand().rand() in for loop in nawk возвращает неизменное значение -ksh

Я хочу добавить 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 дать diff частные номера ?????

Final Update

Sooooo, чтобы какие-то люди читают и имеют те же проблемы, решение является и^сон 1 между двумя частями, которые вы называете srand ....

ответ

3

Put srand() позвонить наружный петля. Для того же семян значение rand() произвело бы такое же последовательность чисел. srand() без аргументов использует текущую временную метку как семя, и, вероятно, цикл использует одно и то же начальное значение. Следовательно, вы видите одинаковое число.

+0

винт меня .. это была вина? не могу поверить, что это ... проверьте, пожалуйста, обновленное сообщение с кодом, я поставлю srand из цикла, неправильно ли я добавить значение 1? я использую его для того, чтобы сказать, что 1 является стартовым значением. – hedgehog

+1

Правильно, разрешение временной метки находится в секундах, поэтому ваш цикл будет давать одинаковое значение на каждой итерации, если все итерации происходят в одном и том же 1-секундном окне. Если текущее время перешло с 12:00:01 до 12:00:02 или подобное во время работы вашего цикла, вы получите 2 значения. @hedgehog - Перемещение srand() вне цикла - это правильная вещь, но с использованием жестко заданного начального значения 1 вы отрицаете всю суть использования srand(), которая заключается в получении нового начального значения для rand() при каждом вызове сценария (если вызовы разделены на 1 секунду или больше). –

+0

Я вижу, но я думал, что прочитал, что значение, которое вы добавляете в srand, поэтому в этом случае я попытался 1, является стартовым значением случайных чисел, так как я вижу, что это похоже на то, что я говорю, выберите случайное число из От 1 до 999 ... я ошибаюсь? – hedgehog