2016-04-21 7 views
2

Ich bin mir zu viel Zeit jetzt mit diesem rand().rand() in for Schleife in nawk gibt immer den gleichen Wert -ksh

Ich möchte 1000 Zufallszahlen in einem Array hinzufügen, das ist, was ich bisher habe, funktioniert es ith kein Fehler, aber Rand vergibt die ganze Zeit die gleiche Anzahl in den Arrays übergeben. Die Varianz der Zufallszahlen Ich will es von 1 bis 999 sein ... irgendwelche Ideen was schief geht?

btw in KSH Ich arbeite ...

nawk ' BEGIN{ 
    for (i=0; i<=999; i++) { 
     srand() 
     NUMBERS[i]= int(rand()*(999)) 
     print NUMBERS[i] 
    } 
}' 

P. S. Kein Duplikat, keine andere Frage für ksh.

AKTUALISIERT

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

So ist der Arbeits Code ich habe, ist dies

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); 
    } 
}'` 

i zwei verschiedene Listen erschaffe, aber der rand() schenkt in beiden exakt gleichen zahlen in der gleichen position .... wie kann ich den zweiten rand geben dif andere Zahlen ?????

Schluss aktualisiert

Sooooo, um alle Menschen das gleiche Problem zu lesen und haben, ist die Lösung in einen Schlaf 1 zwischen den beiden Teilen ue, dass Sie den srand nennen ....

Antwort

3

Put die srand() Anruf außerhalb die Schleife. Für den gleichen Seed Wert rand() würde die gleiche Sequenz von Zahlen produzieren. srand() ohne Argument verwendet den aktuellen Timestamp als Seed und die Schleife verwendet wahrscheinlich denselben Seed-Wert. Daher sehen Sie die gleiche Nummer.

+0

Schraube mich .. das war die Schuld? kann es nicht glauben ... check bitte den aktualisierten post mit dem code, ich lege den srand aus der schleife, ist es falsch wenn ich den wert 1 addiere? Ich benutze es um zu sagen, dass 1 der Startwert ist. – hedgehog

+1

Rechts ist die Zeitstempelauflösung in Sekunden, so dass Ihre Schleife bei jeder Iteration denselben Wert erzeugt, solange alle Iterationen innerhalb des gleichen 1-Sekunden-Fensters stattfinden. Wenn die aktuelle Uhrzeit von 12:00:01 Uhr bis 12:00:02 Uhr oder ähnlich abgelaufen ist, während Ihre Schleife ausgeführt wurde, erhalten Sie 2 Werte. @hedgehog - Das Verschieben von srand() außerhalb der Schleife ist das Richtige, aber mit einem hartcodierten Seed-Wert von 1 negierst du den ganzen Sinn von srand(), um einen neuen Startwert für rand zu bekommen() bei jedem Aufruf des Skripts (solange die Aufrufe 1 Sekunde oder mehr auseinander liegen). –

+0

ich sehe, aber ich dachte, ich lese, dass der Wert, den Sie zu Srand hinzufügen, so in diesem Fall ich versuchte 1, ist der Startwert der Zufallszahlen, so wie ich sehe es ist wie ich sage, wählen Sie eine zufällige Zahl aus 1 bis 999 ... liege ich falsch? – hedgehog