본문으로 바로가기

[C#] Random 클래스

category 개발자과정준비/C# 2020. 8. 23. 00:14
반응형

Random 클래스

C#에서 랜덤값을 만들려면 Random 클래스를 사용한다. 클래스는 참조형이므로 다음과 같이 new 키워드를 사용하여 객체를 생성한다.

Random r = new Random(); // Random 객체 r 생성

Next() 메서드는 다음과 같이 파라미터의 개수에 따라 세 가지로 중복되어 있다.

int x = r.Next();      // 0~2,147,483,647
int y = r.Next(100);   // 0~99 사이의 값 리턴
int z = r.Next(1, 7);  // 1~6 사이의 값 리턴(예: 주사위 숫자)

 

이 외에 NextDouble()은 0.0 이상 1.0 미만의 실수를 리턴한다. 이 메서드들은 한번 호출할 때 하나씩의 랜덤값이 리턴된다. 그러나 0~255까지의 바이트 숫자를 리턴하는 NextBytes()는 독특하게 한번 호출로 배열 전체를 랜덤 숫자로 채워준다.

using System;
namespace _200200820_004
{
    class Program
    {
        static void Main(string[] args)
        {
            Random r = new Random();
            Console.Write("{0, -16}", "Random Bytes");
            Byte[] b = new byte[5];
            r.NextBytes(b);       // 한번 호출로 랜덤 값으로 채움

            foreach (var x in b)
                Console.Write("{0,12}", x);     // 12자리로 출력
            Console.WriteLine();

            Console.Write("{0,-16}", "Random Double");
            double[] d = new double[5];

            for (int i = 0; i < 5; i++)
                d[i] = r.NextDouble();

            foreach (var x in d)
                Console.Write("{0,12:F8}", x);   // 12자리, 소수점 아래 8자리로 출력
            Console.WriteLine();

            Console.Write("{0, -16}", "Random Int32");
            int[] a = new int[5];

            for (int i = 0; i < 5; i++)     // 5개 int 랜덤값 생성 저장
                a[i] = r.Next();
            PrintArray(a);

            Console.Write("{0, -16}", "Random 0~99");
            int[] v = new int[5];

            for (int i = 0; i < 5; i++)   // 5개 0~99의 랜덤값 생성 저장
                v[i] = r.Next(100);
            PrintArray(v);
        }
        private static void PrintArray(int[] v)
        {
            foreach (var value in v)
                Console.Write("{0,12}", value);
            Console.WriteLine();
        }
    }
}

실행화면. 실행할때마다 랜덤값이 할당되므로 결과값이 다르게 출력될 것이다.

반응형

'개발자과정준비 > C#' 카테고리의 다른 글

[C#] List<T> 컬렉션, List<T>와 배열의 정렬  (0) 2020.08.28
[C#] 컬렉션, ArrayList  (0) 2020.08.24
[C#] 제네릭 프로그래밍(메서드, 클래스)  (2) 2020.08.19
C# 복습 (4)  (0) 2020.07.20
C# 복습 (3)  (0) 2020.07.14