[실험실 메모] Random.Next(int minValue, int maxValue) 메서드에 대한 오해

Silverlight/Experiment 2007.10.23 11:19

Random.Next(int minValue, int maxValue) 함수를 사용하면서,

직관적으로 당연히 minValue 와 maxValue를 포함하면서 그 사이의 정수가 나오는 줄 알고 써왔습니다.


그렇게 알고 살다가, 살다가... 오늘 어떤 프로그램에서 아래와 같은 코드를 구현한 후,

int nIndex = myRandom.Next(0, 4);

결과를 테스트 하는데, 죽어도 4가 안나오는 것입니다.

혹시나 해서 F1을 눌러 MDSN Library를 보니, 아래와 같이 기술되어 있었습니다.

매개 변수

minValue
형식: System..::.Int32

반환되는 난수의 하한(포함)입니다.

maxValue
형식: System..::.Int32

반환되는 난수의 상한(제외)입니다. maxValueminValue보다 크거나 같아야 합니다.


4를 보고 싶으면, 아래와 같이 해야하는 것입니다.

int nIndex = myRandom.Next(0, 5);

옛말이 틀리지 않았습니다.

"아는 메서드도 두들겨 보고 써라."


설정

트랙백

댓글

  • BlogIcon 쇼너짱 2009.02.14 15:11 신고 ADDR 수정/삭제 답글

    앗..그랬군요!! 저도 랜덤 값 불러오는 거 수정해야겠어요 ㅋ

    • BlogIcon 길버트 2009.02.19 16:28 신고 수정/삭제

      네, 한 번은 이런 에피소드가 있었어요.

      다음 Devday 4회 때, 경품을 추첨하는데 컴퓨터로 만든 프로그램을 사용하더라구요.
      그때 제 경품번호는 참가자 중 맨끝 번인 44번이었죠.

      진행자가 프로그램의 최고값 입력창에 44를 입력하시고 돌리기 시작하는데,
      그 때 문득 이런 생각이 들더라구요.

      저 프로그램의 메서드도 위 포스트처럼 Max값을 제외한 값 중,
      랜덤 값을 리턴하면 난 당첨 확율이 0%다! ^^

      (하지만 의문을 제기하지 않고 그냥 넘어갔어요...)