안녕하세요!! BlockDMask 입니다.
오늘은 C#의 random(랜덤), 난수생성에 대해서 알아볼 것 입니다.
C/C++에서의 랜덤(srand, rand, time)과는 달리 C#에서는 매우 편하게 random(랜덤)한 수를 가지고 올 수 있는데요, 어떻게 구하는것인지 한번 알아보러 고고 해봅시다.
※ C/C++의 random(랜덤), 난수생성 [바로가기]
1. C# random(랜덤) 클래스에 대해서.
마소에서 만든 C#언어에는 사용자(=개발자)를 위해서 매우 많은 클래스들을 정의해 놓고 있는데요.
랜덤 또한 마찬가지로 만들어져 있습니다. 그이름은 바로 "Random Class" (소리질러!)
쓸데없는 미사여구는 이제 치우고 바로 클래스의 구조를 살펴보고 핵심 메서드(=멤버함수) 사용하는 방법에 대해서 알아보겠습니다.
(아 이게 쓸데없는 미사여구인가)
▼ Random Class
랜덤 클래스가 정의 되어있는 곳을 살펴보면 아래 캡쳐와 같습니다.
**메서드는 C/C++에서 멤버 함수를 말합니다.
1. 랜덤클래스는 System 네임스페이스 안에 속해있습니다.
: Random 클래스는 namespace System 괄호 안에 존재합니다. Systen 네임스페이스는 C# 파일을 만들면 자동으로 포함되어있기 때문에 Random 클래스를 사용하기 위해서 특별히 무언가를 추가한다거나 할 필요가 없습니다.
: C#파일 맨위에 using System; 이 작성되어있을 것 입니다. 없다면 작성하면 됩니다.
2. 랜덤클래스 객체를 생성하는 방법 (생성자)
: Random 변수명 = new Random();
: new 키워드와 생성자를 이용해서 Random 타입의 객체를 생성합니다.
3. 랜덤클래스의 Next() 메서드
: Next() 메서드는 임의의 정수를 반환하는 메서드(멤버 함수) 입니다. (음수는 나오지 않음, n>=0)
: Random rand = new Random();
: int a = rand.Next(); //a에는 임의의 랜덤한 숫자가 들어가게 됩니다.
4. 랜덤클래스의 Next(int minValue, int maxValue) 메서드
: Next(int minValue, int MaxValue)는 min~max 사이의 임의의 랜덤한 수를 반환하는 메서드 입니다. (min이상, max미만)
: Random rand = new Random();
: int a = rand.Next(1, 5); //변수 a에는 1 이상 ~5 미만 사이의 임의의 수가 들어옵니다. (1, 2, 3, 4)
5. 랜덤클래스의 Next(int maxValue) 메서드
: Next(int maxValue) 함수는 max보다 작은 임의의 정수를 반환하는 메서드 입니다. (음수는 나오지 않음, n>=0)
: Random rand = new Random();
: int a = randNext(5); //변수 a에는 5보다 작은 음이아닌 정수가 들어옵니다. (0, 1, 2, 3, 4, 5)
6. 랜덤클래스의 NextBytes(byte[] buffer); 메서드
: NextBytes(byte[] buffer)는 byte 타입의 배열에 random한 값을 채워 넣는 메서드 입니다.
: Random rand = new Random();
: Byte[] arrByte = new Byte[5];
: rand.NextBytes(arrByte); //배열 arrByte 모든 요소에 각각 랜덤한 값을 넣어줍니다.
: 배열 요소에 넣어주는 값의 범위는 당연하게도, 0~바이트타입(부호 없는 8비트 정수)의 최대 크기 입니다.
7. 랜덤클래스의 NextDouble(); 메서드
: NextDouble()은 double 타입의 임의의 수를 반환하는 메서드 입니다.
: Random rand = new Random();
: double d = rand.NextDouble(); // 0.0~1.0 사이의 double 타입 수를 random 하게 반환합니다.
2. C# random(랜덤) 예제 및 사용법
namespace RandomExample { class Program { main을 포함해야하는 왼쪽 것은 코드가 오른쪽으로 길어지기 때문에 생략하였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | //C# Random Class Example. BlockDMask. using System; static void Main(string[] args) { Random rand = new Random(); //1. Next() Console.WriteLine("1. Next()"); for (int i=0; i < 10; ++i) { int a = rand.Next(); Console.WriteLine("Next() : " + a); } //2. Next(min, max) Console.WriteLine("\n2. Next(min, max)"); for (int i = 0; i < 10; ++i) { int a = rand.Next(1, 5); Console.WriteLine("Next(1, 5) : " + a); } //3. Next(max) Console.WriteLine("\n3. Next(max)"); for (int i = 0; i < 10; ++i) { int a = rand.Next(5); Console.WriteLine("Next(5) : " + a); } //4. 응용1 (배열안의 랜덤) Console.WriteLine("\n4. 문자열 배열의 랜덤 index를 가지고 오기"); string[] str = { "BlockDMask", "Random", "C# example", "Blog", "Programmer" }; for (int i = 0; i < 10; ++i) { //randomIndex는 str.Length 보다 작은 음이 아닌 정수를 반환하기 때문에, //랜덤값을 배열의 index로 바로 사용해도 상관없는 상황이 됩니다. int randomIndex = rand.Next(str.Length); //Next(Max). Console.WriteLine("randomIndex = {0}, str[randomIndex] = {1}", randomIndex, str[randomIndex]); } //5. NextBytes(byte[] buffer) Console.WriteLine("\n5. NextBytes(byte[] buffer)"); byte[] arrByte = new byte[5]; rand.NextBytes(arrByte); //한번 호출에 배열 모든 요소 랜덤값 세팅 for (int i = 0; i < arrByte.Length; ++i) { Console.WriteLine("arrByte[{0}] : {1}", i, arrByte[i]); } //6. NextDouble() Console.WriteLine("\n6. NextDouble()"); for (int i = 0; i < 10; ++i) { double d = rand.NextDouble(); Console.WriteLine("NextDouble() : " + d); } } | cs |
▲C# Random 예제의 결과 입니다.
1. Next();
2. Next(1, 5);
3. Next(5);
4. Next(스트링길이);
5. NextBytes(byte[] buffer);
6. NextDouble();
이었고, 프로그램을 실행을 할때마다 랜덤한 값이 나오게 됩니다.
끝까지 읽어주셔서 감사합니다.
'<개인공부> > [C#]' 카테고리의 다른 글
[C#] Nullable type, int? 널러블 타입에 대해서. (0) | 2019.09.28 |
---|---|
[C#] string format, 문자열 보간($)을 이용한 문자열 출력방법 (1) | 2019.08.19 |
[C#] Abs 절대값 함수에 대하여. (0) | 2019.07.10 |
[C#] 리터럴(Literal)이란? (7) | 2019.07.05 |
[C#] params 가변인자 매개변수에 대해서. (4) | 2019.03.21 |
[C#] checked, unchecked 키워드에 대해서. (0) | 2019.03.20 |
[C#] 계산기 윈도우폼 (0) | 2019.02.22 |
[C#] foreach 사용법과 다양한 예제 (1) | 2019.01.11 |