프로그래밍 언어/C#

C# 난수 생성 Random 클래스

ShovelingLife 2022. 10. 24. 16:45

1. C# random(랜덤) 클래스에 대해서.

랜덤 클래스가 정의 되어있는 곳을 살펴보면 아래 캡쳐와 같다.

 

1. 랜덤클래스는 System 네임스페이스 안에 속해있다. 

Random 클래스는 namespace System 괄호 안에 존재한다. Systen 네임스페이스는 C# 파일을 만들면 자동으로 포함되어있기 때문에 Random 클래스를 사용하기 위해서 특별히 무언가를 추가한다거나 할 필요가 없다.

 

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(랜덤) 예제 및 사용법

//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);
    }
}

▲C# Random 예제의 결과다.

1. Next();

2. Next(1, 5);

3. Next(5);

4. Next(스트링길이);

5. NextBytes(byte[] buffer);

6. NextDouble();

 

출처: https://blockdmask.tistory.com/347 [개발자 지망생:티스토리]