2017-11-19 1 views
-1

각기 다른 객체를 만들려고합니다. 각 객체에는 임의의 값을 가진 숫자의 구조체 배열이 있습니다. 컴파일 후 모든 객체의 배열 내부에 같은 번호의 시퀀스가 ​​생깁니다.
배열 안에 고유 한 일련의 숫자를 가진 다른 개체를 만드는 방법이 있습니까?고유 한 난수를 갖는 구조의 배열을 사용하여 여러 객체 만들기

#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; 
    } 

답변

1

srand() 호출을 메인으로 이동합니다. 즉, 한 번만 실행하십시오.
당신이 그것을 사용하는 방식으로, 적어도 시작시에 모든 객체를 생성/초기화하는 경우 각 객체에 대해 너무 짧은 순서로 호출됩니다. 나는. 그들은 모두 초기화됩니다. 반면 time(0)은 동일한 시드를 제공합니다. 이는 의사 난수 생성기가 기본적으로 재설정됨을 의미합니다 (동일한 초기 값에서 동일한 시퀀스 시작).

이것을 확인하려면 (srand 호출을 이동하기 전에) 루프를 확장 할 수 있습니다. 충분한 시간이 걸리므로 time(0)이 안정적으로 다른 값을 가지면 그룹 내에서 값이 같지만 그룹간에 다른 개체 그룹이 표시됩니다.

srand()은 정확히 한 번만 호출해야합니다. 자주 호출하면 임의성이 향상되지 않습니다.

관련 문제