본문 바로가기
공부/C#

C# Random

by ding9 2012. 9. 21.

 

요즘 개인 프로젝트로 로또 프로그램을 만들고 있다.

 

만들던중에 그냥 랜덤으로 숫자 뽑는게 필요하고 내가 스스로 뽑은 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까지가 적당할듯 싶다... 난 무지 빨라야 하는건 아니라서 테스트는 패스...

 

만약에 난수를 한번만 발생(갯수는 상관 없는듯..)시키면 그냥 첨소스대로 사용해도 그닥 문제가 되진 않는거 같다. 그리고 다른 일하다가 발생시켜도 문제 없을듯...

 

오늘은 여기까지....

반응형

댓글