Microsoft MVP성태의 닷넷 이야기
정말 황당한 경우입니다.. [링크 복사], [링크+제목 복사]
조회: 1199
글쓴 사람
김대훈
홈페이지
첨부 파일
 
너무나 황당한 일을 겪어서 질문을 드립니다...
로또를 생성해주는 메서드를 만들고
각각 출력해주는 프로그램을 만들었는데요

정말 어이없게도 CTRL+F5로 컴파일을 하면 numa 와 numb의 값이 똑같이 나옵니다
F10으로 한줄씩 실행하면 정상적으로 numa 와 numb는 다른값이 나오구요...

이런일이 있을수가 있는건지 궁금해요...
4개월 공부하면서 이런적은 처음이어서..질문드려요..



using System;

namespace lotto
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numa = CreateLottoA();
            int[] numb = CreateLottoB();

            foreach (var a in numa)
            {
                Console.WriteLine(a);
            }
            foreach (var b in numb)
            {
                Console.WriteLine(b);
            }
        }
        private static int[] CreateLottoA()
        {
            
            Random rnd = new Random();
            int[] num = new int[5];
            int number = 0;

            for (int i = 0; i < 5; i++)
            {
                number = rnd.Next(0, 46);
                if (Array.IndexOf(num, number) == -1)
                {
                    num[i] = number;
                    continue;
                }
                i--;
            }
            Array.Sort(num);
            return num;
        }
        private static int[] CreateLottoB()
        {

            Random rnd = new Random();
            int[] num = new int[5];
            int number = 0;

            for (int i = 0; i < 5; i++)
            {
                number = rnd.Next(0, 46);
                if (Array.IndexOf(num, number) == -1)
                {
                    num[i] = number;
                    continue;
                }
                i--;
            }
            Array.Sort(num);
            return num;
        }
    }
}




donaricano-btn



[최초 등록일: ]
[최종 수정일: 9/23/2019 ]


비밀번호

댓글 쓴 사람
 



2019-09-23 11시34분
Random의 기본 seed 값이 Environment.TickCount이기 때문이고, Random 타입 자체가 의사 난수를 생성하는 구조이기 때문에 seed가 같으면 난수 생성 배열도 같습니다. 중간에 아래와 같이 sleep을 주면 다르게 나올 것입니다.

            int[] numa = CreateLottoA();
            Thread.Sleep(16);
            int[] numb = CreateLottoB();

왜 16인지는 다음의 글을 참고하세요.

윈도우 운영체제의 시간 함수 (1) - GetTickCount와 timeGetTime의 차이점
; http://www.sysnet.pe.kr/2/0/11063

정성태
2019-09-23 12시51분
[김대훈] 와............그래서 그런거군요 ㅎㅎㅎㅎ 답변 감사드립니다.
[손님]

... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
4835guest5/25/20174084wpf Canvas 질문드립니다. [1]
4834부탁드립니다5/19/20174416익스체인지 서버 구동중 인증서를 받는 과정에서오류가 납니다 [1]
4833안종윤5/18/20174613winform을 Web Browser에 붙일 수 있는지요? [1]
4832guest5/17/20174457c# UDP socket예제 실행방법 [3]
4831guest5/15/20175711WPF .net 3.5에서 TextBox 한글 문제 [3]
4830초보자5/7/20178943프로그램 비정상 종료 메시지 창 없애는 방법 [4]
4829윤현수4/26/20175576System.Text.Encoding 질문 [1]
4828jaemin4/20/20173902시스템 종료시 block 함수 xp 지원가능한 방법 질문 [2]
4827ds4/13/20175652매서드 정의로 이동시 [메타데이터에서]에서 라고 나오는 것은 뭔가요? [1]
4826김솔지4/11/20174513CxImage 문자 출력 [1]
4825플메4/10/20174350덱스트 업로드 하는데 구성요소 서비스에 엑셀이 안뜨네요..ㅜㅜ [1]파일 다운로드1
4824김상경4/9/20174139win7에서 vb6.0을 이용해서 프로그램을 만들었습니다.(제가 만든건 아니고 옆 동료가 만들었습니다.) [1]파일 다운로드1
4823조상현3/28/20174672windows event log 에 대한 정보는 어디서 얻을 수 있을까요? [1]
4822부우3/24/20175933글수정이 안되어 다시올려드립니다ㅠ [12]파일 다운로드2
4821부우3/22/201714190파일이나 어셈블리 중 하나를 로드에러 좀 봐주세요 [9]파일 다운로드1
4820듀이3/20/20174009오차 없이 동시에 명령을 보내게 가능한가요? [2]파일 다운로드1
4819popo3/20/20174637C# sslstream 사용시 Cipher List 설정 [3]
4818부우3/16/201711659DllImport 사용시 진입점을 찾을수 없습니다 [2]
4817yun3/15/20174520서피스프로4의 HYPER-V로 윈도우7을 깔았는데... [1]
4816부우3/15/20176404C++ DLL함수 사용 질문드립니다 [10]
4815김지용3/14/20173511.net core linux 오류 [2]
4814김솔지3/13/20174451인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spowner3/8/20175463멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/20175136.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/20177020C# 가상 시리얼 [4]
4808이길용2/9/20176775WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...