공부/C#

C# Random

ding9 2012. 9. 21. 10:55

 

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

 

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

 

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

 

오늘은 여기까지....

반응형