요즘 개인 프로젝트로 로또 프로그램을 만들고 있다.
만들던중에 그냥 랜덤으로 숫자 뽑는게 필요하고 내가 스스로 뽑은 30개정도의 번호를 랜덤하게 배열하는 것도 필요해서 간단하게 프로그램을 구성해봤다.
그러던중...
이 망할 랜덤이 계속 같은 값을 뿌리는게 아닌가....ㅡㅡ;
그래서 서핑으로 여기저기를 기웃 거리는데 뭐 딱히 없었다..
우선 랜덤사용할 부분을 함수로 지정해서 아래와 같은 소스를 짯다
private int[] selectNo()
{
int[] ret = new int[6];
Random t = new Random();
for (int i = 0; i < 6; i++)
{
ret[i] = t.Next(0, 46);
int a = ret[i];
int b = 0;
for (int j = 0; j < 6; j++)
{
if (a == ret[j])
{
b++;
if (b > 1)
{
i--;
j = 6;
}
}
}
}
return ret;
}
위의 소스를 보면 랜덤객체를 생성한뒤에 숫자를 임의로 발생시키고 발생된 숫자를 검색해서 같은 값이 나오지 않도록 했는데..
이녀석이!!!! 같은 값을 주는게 아닌가...
위 함수를 연속적으로 반복해서 6개씩 총 10번숫자를 발생을 시켰는데
가끔은 2회나 3회까지는 다른값을 발생시키고 나머지는 같은수가 나오는것이다...
그래서 디버깅을 했는데... 이런!!! 디버깅할때는 또 다 다른 값이 나오는 것이다.
결론은 너무~~~ 빨라서 그런것이라는 판단으로...
private int[] selectNo()
{
int[] ret = new int[6];
Random t = new Random();
for (int i = 0; i < 6; i++)
{
Delay(10); // 추가부분..
ret[i] = t.Next(0, 46);
int a = ret[i];
int b = 0;
for (int j = 0; j < 6; j++)
{
if (a == ret[j])
{
b++;
if (b > 1)
{
i--;
j = 6;
}
}
}
}
return ret;
}
위처럼 딜레이를 줬다...
결과는...!!!!!
원하는대로 잘나온다....물론 시간은 좀 걸린다...ㅡㅡㅋ
위의 딜레이 소스는 http://ding9.tistory.com/392 이글을 참조하면됨..
참 알다가도 모르겠다...
C언어때는 함수하나로 됐는데 얘는 속도때문에 같은 값이 나온다는게....;;;
암튼 나처럼 연속적으로 난수를 발생시켜야한다면 참조할만할것 같아 올린다.
속도가 빨라야 한다면... delay를 좀더 줄여봐도 괜찮을듯... 1로도 테스트 해봤는데 두어번 같은 숫자가 나온다.. 2나 3까지가 적당할듯 싶다... 난 무지 빨라야 하는건 아니라서 테스트는 패스...
만약에 난수를 한번만 발생(갯수는 상관 없는듯..)시키면 그냥 첨소스대로 사용해도 그닥 문제가 되진 않는거 같다. 그리고 다른 일하다가 발생시켜도 문제 없을듯...
오늘은 여기까지....
'공부 > C#' 카테고리의 다른 글
C# 쓰레드(thread, 스레드)... 그리고 tcpip 소켓.... (0) | 2012.10.04 |
---|---|
응용 프로그램 작성시 주의점. (2) | 2012.09.26 |
C# 숫자의 여러가지 텍스트 표시 (표준 숫자 형식 문자열) (0) | 2012.08.23 |
C# delay (2) | 2012.08.23 |
C# serialport 데이터 주고받기 test 시 주의점( ReadByte와 ReadExisting) (0) | 2012.07.20 |
댓글