달나라 노트

C# : Random, Next, NextDouble (랜덤한 수 추출, 난수 추출, 특정 범위 안의 랜덤한 정수 추출) 본문

C#/C#

C# : Random, Next, NextDouble (랜덤한 수 추출, 난수 추출, 특정 범위 안의 랜덤한 정수 추출)

CosmosProject 2022. 4. 18. 19:20
728x90
반응형

 

 

 

Random class는 랜덤한 수를 추출할 때 사용합니다.

Random 객체를 생성한 후 Random 객체의 Next method를 이용하면 난수를 추출할 수 있습니다.

 

Random 객체에서 사용할 수 있는 난수 생성 method는 아래와 같습니다.

 

Next(a) -> 0 이상이고, a 미만인 범위에 존재하는 랜덤한 정수를 return합니다.

Next(a, b) -> a 이상이고, b 미만인 범위에 존재하는 랜덤한 정수를 return합니다.

NextDouble() -> 0이상 1 미만인 구간에 존재하는 랜덤한 실수를 return합니다.

 

 

 

 

 

아래 코드를 봅시다.

 

using System;

class MyProgram
{
    public static void Main()
    {
        Random rand = new Random();
        int random_number = rand.Next(100);

        Console.WriteLine(random_number);
    }
}


-- Result
65

 

위 코드는 0 이상, 100 미만 구간에 있는 랜덤한 정수 하나를 추출하는 코드입니다.

 

 

 

 

 

 

        Random rand = new Random();
        int random_number = rand.Next(100);

 

위처럼 Random class를 이용해서 객체를 생성합니다.

그리고 생성한 rand 객체의 Next() method를 이용합니다.

 

Next() method는 0 이상, 주어진 인자 미만의 구간에 있는 정수 중 랜덤한 정수 하나를 return합니다.

 

 

 

 

 

 

 

 

 

 

using System;

class MyProgram
{
    public static void Main()
    {
        Random rand = new Random();
        int random_number = rand.Next(-1000, 100);

        Console.WriteLine(random_number);
    }
}


-- Result
-324

 

Next(-1000, 100)은 -1000 이상 100 미만인 구간에 존재하는 랜덤한 정수를 return합니다.

 

 

 

 

 

 

 

 

 

 

 

using System;

class MyProgram
{
    public static void Main()
    {
        Random rand = new Random();
        double random_number = rand.NextDouble();

        Console.WriteLine(random_number);
    }
}


-- Result
0.885828566218646

 

NextDouble() method는 위처럼 0 이상 1 미만 구간에 존재하는 랜덤한 실수를 return합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Random을 이용한 예시입니다.

Random을 이용해서 Window를 클릭할 때 마다 랜덤한 위치에 점이 찍히도록 하였습니다.

 

using System;
using System.Windows.Forms;
using System.Drawing;

class MyProgram
{
    public static void Main()
    {
        Form fm = new Form();
        fm.Width = 500;
        fm.Height = 300;

        int val_padding = 50;

        Random random = new Random();
        int x = random.Next(val_padding, fm.Width - val_padding);
        int y = random.Next(val_padding, fm.Height - val_padding);

        Label lbl = new Label();
        lbl.Parent = fm;
        lbl.Width = 200;
        lbl.Height = 20;
        lbl.Text = $"X = {x}, Y = {y}";


        void fm_paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen pen = new Pen(Color.Black, 5);

            g.DrawEllipse(pen, x, y, 10, 10);
        }
        fm.Paint += new PaintEventHandler(fm_paint);

        void fm_click(object sender, EventArgs e)
        {
            x = random.Next(val_padding, fm.Width - val_padding);
            y = random.Next(val_padding, fm.Height - val_padding);
            lbl.Text = $"X = {x}, Y = {y}";

            fm.Invalidate();
        }
        fm.Click += new EventHandler(fm_click);


        Application.Run(fm);
    }
}

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments