2009-06-17 3 views
6

for 내 루프 내에서 RandomNumber 메서드가 호출 될 때마다 다른 난수를 생성하려고합니다. 지금은 매번 같은 번호를 반환합니다.RandomNumber 메서드는 매번 호출 할 때 같은 번호를 반환합니다.

이 내 난수 방법 :

private int RandomNumber(int min, int max) 
    { 
     Random random = new Random(); 
     return random.Next(min, max); 
    } 

이것은 내가 그것을 사용하고있는 상황은 다음과 같습니다 (그것은 내가이 일을 얻을려고 덤비는되었다해서 좀 지저분입니다 ....)

 for (int i = 0; i < charsRaw.Length; i++) 
     { 
      int max = charsRaw.Length - 1; 
      int rand = 0; 
      rand = RandomNumber(0, max); 

      charsNew[i] = charsRaw[rand]; 
      text2 += charsNew[i]; 

     } 

for 루프를 사용하여 호출 할 때마다 다른 값을 반환하는 것처럼 보이지 않습니다.

text2 + = charsNew [i] 다음에 MessageBox.Show (rand.ToString())를 붙이면 매번 다른 값을주고 의도 한대로 작동합니다. 이상한.

감사합니다. 에릭

답변

17

무작위로 한 번 인스턴스화하십시오. 동일한 인스턴스에서 .Next()를 여러 번 호출하십시오.

MSDN

는 :

난수 생성 시드 값에서 시작 . 같은 종자가 반복적으로 사용 인 경우, 반복적으로 임의의 인스턴스를하고자 다른 씨앗을 매번 사용하는 경우, 번호의 같은 시리즈는

생성됩니다.

+0

고마워요! 이것은 효과가있다! – Eric

+4

마지막 단락은 약간 오해의 소지가 있습니다. 새로운 Random()은 현재 시간으로 생성자를 파싱하는 것과 정확히 동일합니다. 이러한 작업을 엄격한 루프 내에서 수행하기 때문에 똑같은 시퀀스를 산출하는 수많은 동일한 인스턴스가 생성됩니다. 현재 시간을 수동으로 시드하는 것은 여기서 상황을 개선하는 데 도움이되지 않습니다. 또한 대부분의 발전기에서 무작위성에 나쁜 영향을주는 씨앗에는 선형 의존성이 거의 없습니다 (cf. http://portal.acm.org/citation.cfm?doid=1276927.1276928 참조). – Joey

+0

. 내가 편집 할게. – anthony

1

진정한 무작위 순서가 매번 같은 번호가 될 수 없다는 것은 아무 것도 없습니다! :-) 합법적 인 가능성은 아주 적으므로 절대 확신 할 수 없습니다. 덮개 용 오리

+0

http://web.archive.org/web/20011027002011/http://dilbert.com/comics/dilbert/archive/images/dilbert2001182781025.gif –

관련 문제