2009-09-29 12 views
20

번호를 선택하는 것만 큼 간단하지 않은가 봅니다 : 0 또는 1? 당신이 50 대 50 확률을 원하는 경우임의의 숫자 : 0 또는 1

 Random rand = new Random(); 

     if (rand.NextDouble() == 0) 
     { 
      lnkEvents.CssClass = "selected"; 
     } 
     else 
     { 
      lnkNews.CssClass = "selected"; 
     } 
+5

아래의 모든 솔루션은 새로운 무작위 개체를 만들었습니다. 매우 신속하게 무리를 만들지 않는 한 괜찮습니다. 그렇게한다면, 모두 똑같은 닥치는대로의 씨앗을 가질 확률이 높습니다. 그리고 당신은 같은 결과를 반복해서 얻을 것입니다. 이 문제를 피하려면 프로그램의 임의의 부분을 만들어 주위를 전달하십시오. –

+0

NextDouble은 임의의 클래스에 존재하지 않습니다. –

답변

71
Random rand = new Random(); 

if (rand.Next(0, 2) == 0) 
    lnkEvents.CssClass = "selected"; 
else 
    lnkNews.CssClass = "selected"; 

Random.Next는 (포함) 및 하한 (배타적) 상한 사이의 임의의 정수를 픽업.

+0

이것은 내가 갈만한 것입니다. – RichardOD

+8

참고 : Random rand = new Random(); 이상적으로 다른 곳에서 붙어 있어야합니다. rand 호출 바로 위에 있지 않아야합니다. 다음. 이상적으로, 그것은 한 번 초기화되어야합니다. – Brian

26

, 내가 제안 :

Random rand = new Random(); 

if (rand.NextDouble() >= 0.5) 
    lnkEvents.CssClass = "selected"; 
else 
    lnkNews.CssClass = "selected"; 
+0

예 - 현재 확률은 거의 없습니다. :-). – RichardOD

+2

downvoter 의견을 남겨주세요. 감사. –

2

Random.NextDouble() 0하지만 1.0 이하에서 어떤 두 수를 선택합니다. 이 숫자의 대부분은 0이 아니므로 배포본이 예상 한 것과 같지 않습니다.

+6

"당신이 기대하는 것조차하지 말라"는 말은 그다지 삼가합니다. 거의 모든 생성 된 결과는 1이됩니다. – Godeke

+1

레코드 용 : PRNG에서 0을 반환하는 것을 본 적이 없습니다. 몇 달 전에 여러 번 테스트 해 보았습니다. :-) – Joey

3

NextDouble 메서드 대신 Next 메서드를 사용하면 두 값 중 하나를 선택하는 것이 더 명확하게 나타납니다. 제조

const int ExclusiveUpperBound = 2; 
if (new Random().Next(ExclusiveUpperBound) == 0) 

ExclusiveUpperBound "보다 0 이상, 이하"이다.