2013-06-07 6 views
7

나는 0에서 100 사이의 10 자리 임의의 숫자를 출력하는 간단한 코드를 제공했습니다. Visual Studio (C#)에서 F5를 사용하여이 코드를 실행하면 10 번 같은 번호. 그러나 F10 또는 F11을 사용하여 줄 단위로 디버깅 모드를 실행하면 10 개의 다른 숫자가 표시됩니다 (모두 다를 수는 있지만 임의로 선택됩니다). 프로그램을 실행하면 디버깅 모드와 다른 결과가 나타납니다

public static void rand() { 
    for (int j = 0; j < 10; j++) { 
     Random r = new Random(); 
     Console.WriteLine(r.Next(100)); 
    } 
} 

나는 참조로 루프 및 복사 이외의 무작위 연구를 인스턴스화하는 것입니다 문제를 해결하는 방법을 알고,하지만 난 이런 일이 이유를 이해하고 싶습니다. 나는 이것이 씨앗과 관련이 있다고 생각하지만, 프로그램은 나에게 혼란 스러울 수있는 디버깅 모드로 작동하면서 작동한다.

또한 이제 디버깅 모드가 올바른 결과를 제공하는지 여부를 항상 테스트해야하는지 여부를 묻습니다.

+0

제안에 대한 귀하의 임의 * 외부 * 루프를 –

+0

감사를 선언하려고하지만 난 이미 포스트 –

답변

10

Random 인스턴스를 만들고 루프 앞에 넣어야합니다.

public static void rand() { 
    Random r = new Random(); 
    for (int j = 0; j < 10; j++) {   
     Console.WriteLine(r.Next(100)); 
    } 
} 

그리고 here의 설명 :

... 기본 시드 값은 시스템 클럭에서 파생 유한 해상도를 가지고있다. 결과적으로 기본 생성자에 대한 호출에 의해 연속적으로 생성되는 서로 다른 무작위 객체는 동일한 기본 시드 값을 가지므로 동일한 난수 세트를 생성합니다. 이 문제는 단일 난수 오브젝트를 사용하여 모든 난수를 생성함으로써 피할 수 있습니다. ...

다른 Random 인스턴스를 사용하려는 경우 다른 seed 값을 사용해야합니다.

public static void rand() 
{ 
    for(int j = 0; j < 10; j++) 
    { 
      Random r = new Random(j); 
      Console.WriteLine(r.Next(100)); 
    } 
} 

귀하의 질문에 대답 : 난 항상 디버깅 모드가 나에게 올바른 결과를주고 있는지 여부를 테스트해야하는 경우 를 ... 예를 j 변수하십시오.

아니요, 디버깅 모드 결과를 의심하지 않아도됩니다. 그들은 옳다. 틀린 것은 그들에 대한 당신의 이해가 될 수 있습니다.

+8

에서이 랜덤 생성자는 당신이 반사경으로 보면 모습입니다 언급'공공 랜덤() :이 (Environment.TickCount) {}' –

관련 문제