2017-11-19 5 views
-1

Ich versuche, verschiedene Objekte mit jeweils einem Array von Zahlenstrukturen mit zufälligen Werten zu erstellen. Nach dem Kompilieren bekomme ich innerhalb der Arrays jedes Objekts die gleiche Zahlenfolge.
Gibt es eine Möglichkeit, verschiedene Objekte mit eindeutigen Zahlenfolgen innerhalb der Arrays zu erstellen?Erstellen mehrerer Objekte mit Array von Strukturen mit eindeutigen Zufallszahlen

#include <iostream> 
    #include <time.h> 
    #include <stdlib.h> 
    using namespace std; 

    struct storeTwoValue 
    { 
      int x; 
      int y; 
    }; 


    class practice{ 
    public: 
    storeTwoValue storageArray[10]; 
    void valueGenerator() 
    {  srand(time(NULL)); 
      for (int i = 0; i< 10; i++) 
      { 
        storageArray[i].x = rand()%10 +1; 
          storageArray[i].y = rand()%7 + 1; 
        } 
      } 

      void print() 
      { 
        cout<<"x"<<" "<<"y"<<endl; 
        for (int i = 0; i< 10; i++) 
        { 
          cout<<storageArray[i].x <<"  "; 
          cout<< storageArray[i].y << endl; 
        } 
        cout<<endl; 

      } 
    }; 

     int main() 
    { 
      for(int i=0; i<3; i++) 
      {  practice A; 
        A.valueGenerator(); 
        A.print(); 
      } 
      return 0; 
    } 

Antwort

1

Bewegen Sie den srand() Anruf in dem Haupt, das heißt es nur einmal ausführen.
Die Art, wie Sie es verwenden, wird in zu kurzer Reihenfolge für jedes Objekt aufgerufen, zumindest wenn Sie sie alle beim Start erstellen/initialisieren. I.e. sie werden alle initialisiert, während time(0) identische Seeds liefert, was bedeutet, dass der Pseudozufallszahlengenerator grundsätzlich zurückgesetzt wird (beginnend mit derselben Sequenz vom selben Anfangswert).

Um dies zu überprüfen, können Sie (vor dem Verschieben des Srand-Aufrufs) Ihre Schleife erweitern. Wenn es genügend Zeit benötigt, so dass time(0) zuverlässig unterschiedliche Werte aufweist, werden Gruppen von Objekten mit denselben Werten innerhalb der Gruppen angezeigt, die sich jedoch innerhalb der Gruppen unterscheiden.

srand() aufrufen sollte genau einmal durchgeführt werden, es ruft oft nicht Zufälligkeit verbessern.

Verwandte Themen