Random 생성자

정의

Random 클래스의 새 인스턴스를 초기화합니다.

오버로드

Name Description
Random()

기본 시드 값을 사용하여 클래스의 Random 새 인스턴스를 초기화합니다.

Random(Int32)

지정된 시드 값을 사용하여 클래스의 Random 새 인스턴스를 초기화합니다.

Random()

Source:
Random.cs
Source:
Random.cs
Source:
Random.cs
Source:
Random.cs
Source:
Random.cs

기본 시드 값을 사용하여 클래스의 Random 새 인스턴스를 초기화합니다.

public:
 Random();
public Random();
Public Sub New ()

예제

다음 예제에서는 매개 변수가 없는 생성자를 사용하여 세 개의 Random 개체를 인스턴스화하고 각각에 대해 5개의 임의 정수 시퀀스를 표시합니다. .NET Framework에서 실행되는 경우 처음 두 Random 개체가 연속적으로 생성되므로 시스템 클록에 따라 동일한 시드 값을 사용하여 인스턴스화되므로 동일한 난수 시퀀스를 생성합니다. 반면에 세 번째 Random 개체의 매개 변수가 없는 생성자는 메서드 호출 Thread.Sleep 로 인해 2초 지연된 후에 호출됩니다. 이 값은 세 번째 Random 개체에 대해 다른 시드 값을 생성하므로 다른 시퀀스의 난수를 생성합니다.

using System;
using System.Threading;

public class RandomNumbers
{
   public static void Main()
   {
      Random rand1 = new Random();
      Random rand2 = new Random();
      Thread.Sleep(2000);
      Random rand3 = new Random();
      ShowRandomNumbers(rand1);
      ShowRandomNumbers(rand2);
      ShowRandomNumbers(rand3);
   }

   private static void ShowRandomNumbers(Random rand)
   {
      Console.WriteLine();
      byte[] values = new byte[5];
      rand.NextBytes(values);
      foreach (byte value in values)
         Console.Write("{0, 5}", value);
      Console.WriteLine();
   }
}
// The example displays an output similar to the following:
//       28   35  133  224   58
//
//       28   35  133  224   58
//
//       32  222   43  251   49
Imports System.Threading

Module RandomNumbers
   Public Sub Main()
      Dim rand1 As New Random()
      Dim rand2 As New Random()
      Thread.Sleep(2000)
      Dim rand3 As New Random()
      ShowRandomNumbers(rand1)
      ShowRandomNumbers(rand2)
      ShowRandomNumbers(rand3)
   End Sub
   
   Private Sub ShowRandomNumbers(rand As Random)
      Console.WriteLine()
      Dim values(4) As Byte
      rand.NextBytes(values)
      For Each value As Byte In values
         Console.Write("{0, 5}", value)
      Next      
      Console.WriteLine() 
   End Sub
End Module
' The example displays an output similar to the following:
'       28   35  133  224   58
'    
'       28   35  133  224   58
'    
'       32  222   43  251   49

설명

.NET Framework에서 기본 시드 값은 한정된 해상도를 포함하는 시스템 클록에서 파생됩니다. 따라서 매개 변수가 없는 생성자를 호출하여 연속해서 만드는 다른 Random 개체는 동일한 기본 시드 값을 가지므로 동일한 난수 집합을 생성합니다. 단일 Random 개체를 사용하여 모든 난수를 생성하여 이 문제를 방지할 수 있습니다. 사용자 고유의 임의 시드 값을 생성하고 생성자에 전달하여 해결할 수도 있습니다 Random(Int32) . 자세한 내용은 생성자를 Random(Int32) 참조하세요.

.NET Core에서 기본 시드 값은 스레드 정적 의사 난수 생성기에 의해 생성되므로 앞에서 설명한 제한 사항이 적용되지 않습니다. 닫기 연속으로 만든 다른 Random 개체는 .NET Core에서 다양한 난수 집합을 생성합니다.

난수 생성기가 임의의 숫자 시퀀스를 생성하도록 하려면 이 생성자를 호출합니다. 다른 난수 생성기에 대해 동일한 난수의 고정 시퀀스를 생성하려면 고정 시드 값을 사용하여 생성자를 호출 Random(Int32) 합니다. 이 Random 생성자 오버로드는 난수를 사용하는 앱을 테스트할 때 자주 사용됩니다.

난수 생성기를 인스턴스화한 후에는 개별 Random 메서드(예: Next() 또는 NextDouble())를 호출하여 난수를 생성합니다.

적용 대상

Random(Int32)

Source:
Random.cs
Source:
Random.cs
Source:
Random.cs
Source:
Random.cs
Source:
Random.cs

지정된 시드 값을 사용하여 클래스의 Random 새 인스턴스를 초기화합니다.

public:
 Random(int Seed);
public Random(int Seed);
new Random : int -> Random
Public Sub New (Seed As Integer)

매개 변수

Seed
Int32

의사 난수 시퀀스의 시작 값을 계산하는 데 사용되는 숫자입니다. 음수를 지정하면 숫자의 절대값이 사용됩니다.

예제

다음 예제에서는 시드 매개 변수를 사용하고 임의의 정수 및 double 시퀀스를 생성하는 클래스 생성자를 사용하여 개체를 만듭니 Random 다. 이 예제에서는 생성자 및 시드 매개 변수를 사용하여 개체를 Random 다시 만들 때 동일한 시퀀스가 생성되는 것을 보여 줍니다.

// Example of the Random class constructors and Random.NextDouble()
// method.
using System;
using System.Threading;

public class RandomObjectDemo
{
    // Generate random numbers from the specified Random object.
    static void RunIntNDoubleRandoms(Random randObj)
    {
        // Generate the first six random integers.
        for(int j = 0; j < 6; j++)
            Console.Write(" {0,10} ", randObj.Next());
        Console.WriteLine();

        // Generate the first six random doubles.
        for(int j = 0; j < 6; j++)
            Console.Write(" {0:F8} ", randObj.NextDouble());
        Console.WriteLine();
    }

    // Create a Random object with the specified seed.
    static void FixedSeedRandoms(int seed)
    {
        Console.WriteLine(
            "\nRandom numbers from a Random object with " +
            "seed = {0}:", seed);
        Random fixRand = new Random(seed);

        RunIntNDoubleRandoms(fixRand);
    }

    // Create a random object with a timer-generated seed.
    static void AutoSeedRandoms()
    {
        // Wait to allow the timer to advance.
        Thread.Sleep(1);

        Console.WriteLine(
            "\nRandom numbers from a Random object " +
            "with an auto-generated seed:");
        Random autoRand = new Random();

        RunIntNDoubleRandoms(autoRand);
    }

    static void Main()
    {	
        Console.WriteLine(
            "This example of the Random class constructors and " +
            "Random.NextDouble() \n" +
            "generates the following output.\n");
        Console.WriteLine(
            "Create Random objects, and then generate and " +
            "display six integers and \nsix doubles from each.");

        FixedSeedRandoms(123);
        FixedSeedRandoms(123);

        FixedSeedRandoms(456);
        FixedSeedRandoms(456);

        AutoSeedRandoms();
        AutoSeedRandoms();
        AutoSeedRandoms();
    }
}

/*
This example of the Random class constructors and Random.NextDouble()
generates an output similar to the following:

Create Random objects, and then generate and display six integers and
six doubles from each.

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with an auto-generated seed:
  380213349   127379247  1969091178  1983029819  1963098450  1648433124
 0.08824121  0.41249688  0.36445811  0.05637512  0.62702451  0.49595560

Random numbers from a Random object with an auto-generated seed:
  861793304  2133528783  1947358439   124230908   921262645  1087892791
 0.56880819  0.42934091  0.60162512  0.74388610  0.99432979  0.30310005

Random numbers from a Random object with an auto-generated seed:
 1343373259  1992194672  1925625700   412915644  2026910487   527352458
 0.04937517  0.44618494  0.83879212  0.43139707  0.36163507  0.11024451
*/
// Example of the Random class constructors and Random.NextDouble()
// method.
open System
open System.Threading

// Generate random numbers from the specified Random object.
let runIntNDoubleRandoms (randObj: Random) =
    // Generate the first six random integers.
    for _ = 1 to 6 do
        printf $" {randObj.Next(),10} "
    printfn ""

    // Generate the first six random doubles.
    for _ = 1 to 6 do
        printf $" {randObj.NextDouble():F8} "
    printfn ""

let fixedSeedRandoms seed =
    printfn $"\nRandom numbers from a Random object with seed = %i{seed}:"
    let fixRand = Random seed
    
    runIntNDoubleRandoms fixRand

let autoSeedRandoms () =
    // Wait to allow the timer to advance.
    Thread.Sleep 1

    printfn "\nRandom numbers from a Random object with an auto-generated seed: "
    let autoRand = Random ()

    runIntNDoubleRandoms autoRand

printfn 
  """This example of the Random class constructors and Random.NextDouble()
generates the following output.
Create Random objects, and then generate and display six integers and
six doubles from each."""
 
fixedSeedRandoms 123
fixedSeedRandoms 123

fixedSeedRandoms 456
fixedSeedRandoms 456

autoSeedRandoms ()
autoSeedRandoms ()
autoSeedRandoms ()

(*
This example of the Random class constructors and Random.NextDouble()
generates an output similar to the following:

Create Random objects, and then generate and display six integers and
six doubles from each.

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with an auto-generated seed:
  380213349   127379247  1969091178  1983029819  1963098450  1648433124
 0.08824121  0.41249688  0.36445811  0.05637512  0.62702451  0.49595560

Random numbers from a Random object with an auto-generated seed:
  861793304  2133528783  1947358439   124230908   921262645  1087892791
 0.56880819  0.42934091  0.60162512  0.74388610  0.99432979  0.30310005

Random numbers from a Random object with an auto-generated seed:
 1343373259  1992194672  1925625700   412915644  2026910487   527352458
 0.04937517  0.44618494  0.83879212  0.43139707  0.36163507  0.11024451
*)
' Example of the Random class constructors and Random.NextDouble() 
' method.
Imports System.Threading

Module RandomObjectDemo

    ' Generate random numbers from the specified Random object.
    Sub RunIntNDoubleRandoms(randObj As Random)

        ' Generate the first six random integers.
        Dim j As Integer
        For j = 0 To 5
            Console.Write(" {0,10} ", randObj.Next())
        Next j
        Console.WriteLine()
            
        ' Generate the first six random doubles.
        For j = 0 To 5
            Console.Write(" {0:F8} ", randObj.NextDouble())
        Next j
        Console.WriteLine()
    End Sub 
        
    ' Create a Random object with the specified seed.
    Sub FixedSeedRandoms(seed As Integer)

        Console.WriteLine(vbCrLf & _
            "Random numbers from a Random object with " & _
            "seed = {0}:", seed)
        Dim fixRand As New Random(seed)
            
        RunIntNDoubleRandoms(fixRand)
    End Sub 
        
    ' Create a random object with a timer-generated seed.
    Sub AutoSeedRandoms()

        ' Wait to allow the timer to advance.
        Thread.Sleep(1)
            
        Console.WriteLine(vbCrLf & _
            "Random numbers from a Random object " & _ 
            "with an auto-generated seed:")
        Dim autoRand As New Random()
            
        RunIntNDoubleRandoms(autoRand)
    End Sub 
        
    Sub Main()
        Console.WriteLine(_
            "This example of the Random class constructors " & _
            "and Random.NextDouble() " & vbCrLf & _
            "generates the following output." & vbCrLf)
        Console.WriteLine("Create Random " & _
            "objects, and then generate and display six " & _
            "integers and " & vbCrLf & "six doubles from each.")
            
        FixedSeedRandoms(123)
        FixedSeedRandoms(123)
            
        FixedSeedRandoms(456)
        FixedSeedRandoms(456)
            
        AutoSeedRandoms()
        AutoSeedRandoms()
        AutoSeedRandoms()
    End Sub
End Module 

' This example of the Random class constructors and Random.NextDouble()
' generates an output similar to the following:
' 
' Create Random objects, and then generate and display six integers and
' six doubles from each.
' 
' Random numbers from a Random object with seed = 123:
'  2114319875  1949518561  1596751841  1742987178  1586516133   103755708
'  0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146
' 
' Random numbers from a Random object with seed = 123:
'  2114319875  1949518561  1596751841  1742987178  1586516133   103755708
'  0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146
' 
' Random numbers from a Random object with seed = 456:
'  2044805024  1323311594  1087799997  1907260840   179380355   120870348
'  0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170
' 
' Random numbers from a Random object with seed = 456:
'  2044805024  1323311594  1087799997  1907260840   179380355   120870348
'  0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170
' 
' Random numbers from a Random object with an auto-generated seed:
'  1920831619  1346865774  2006582766  1968819760   332463652   110770792
'  0.71326689  0.50383335  0.50446082  0.66312569  0.94517193  0.58059287
' 
' Random numbers from a Random object with an auto-generated seed:
'   254927927  1205531663  1984850027   110020849  1438111494  1697714106
'  0.19383387  0.52067738  0.74162783  0.35063667  0.31247720  0.38773733
' 
' Random numbers from a Random object with an auto-generated seed:
'   736507882  1064197552  1963117288   398705585   396275689  1137173773
'  0.67440084  0.53752140  0.97879483  0.03814764  0.67978248  0.19488178

설명

서로 다른 Random 개체에 동일한 시드 값을 제공하면 각 인스턴스가 동일한 난수 시퀀스를 생성합니다. 이 작업은 종종 난수 생성기를 사용하는 앱을 테스트할 때 수행됩니다.

애플리케이션에 다른 난수 시퀀스가 필요한 경우 다른 시드 값으로 이 생성자를 반복적으로 호출합니다. 고유한 시드 값을 생성하는 한 가지 방법은 시간에 종속되도록 하는 것입니다. 예를 들어 오버로드와 마찬가지로 시스템 클록에서 시드 값을 파생합니다 Random() . 그러나 시스템 클록에는 이 생성자의 다른 호출을 다른 시드 값으로 제공하기에 충분한 해상도가 없을 수 있습니다. .NET Framework에서는 다음 예제의 처음 두 Random 개체에 설명된 대로 의사 난수 시퀀스가 동일한 난수를 생성하는 난수 생성기가 생성됩니다. 이를 방지하려면 알고리즘을 적용하여 각 호출에서 시드 값을 구분하거나 메서드를 호출 Thread.Sleep 하여 각 생성자에게 다른 시드 값을 제공하도록 합니다.

using System;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Random rand1 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
      Random rand2 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
      Thread.Sleep(20);
      Random rand3 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
      ShowRandomNumbers(rand1);
      ShowRandomNumbers(rand2);
      ShowRandomNumbers(rand3);
   }

   private static void ShowRandomNumbers(Random rand)
   {
      Console.WriteLine();
      byte[] values = new byte[4];
      rand.NextBytes(values);
      foreach (var value in values)
         Console.Write("{0, 5}", value);

      Console.WriteLine();
   }
}
// The example displays output similar to the following:
//   145  214  177  134  173
//
//   145  214  177  134  173
//
//   126  185  175  249  157
open System
open System.Threading

let showRandomNumbers (rand: Random) =
    printfn ""
    let values = Array.zeroCreate 5
    rand.NextBytes values
    for value in values do 
        printf "%5i" value
    printfn ""

let rand1 = Random(DateTime.Now.Ticks &&& 0x0000FFFFL |> int)
let rand2 = Random(DateTime.Now.Ticks &&& 0x0000FFFFL |> int)
Thread.Sleep 20
let rand3 = Random(DateTime.Now.Ticks &&& 0x0000FFFFL |> int)

showRandomNumbers rand1
showRandomNumbers rand2
showRandomNumbers rand3

// The example displays output similar to the following:
//   145  214  177  134  173
//
//   145  214  177  134  173
//
//   126  185  175  249  157
Imports System.Threading

Module RandomNumbers
   Public Sub Main()
      Dim rand1 As New Random(CInt(Date.Now.Ticks And &h0000FFFF))
      Dim rand2 As New Random(CInt(Date.Now.Ticks And &h0000FFFF))
      Thread.Sleep(20)
      Dim rand3 As New Random(CInt(Date.Now.Ticks And &h0000FFFF))
      ShowRandomNumbers(rand1)
      ShowRandomNumbers(rand2)
      ShowRandomNumbers(rand3)
   End Sub
   
   Private Sub ShowRandomNumbers(rand As Random)
      Console.WriteLine()
      Dim values(4) As Byte
      rand.NextBytes(values)
      For Each value As Byte In values
         Console.Write("{0, 5}", value)
      Next      
      Console.WriteLine() 
   End Sub
End Module
' The example displays output similar to the following:
'      145  214  177  134  173
'    
'      145  214  177  134  173
'    
'      126  185  175  249  157

또 다른 옵션은 애플리케이션에서 모든 난수를 생성하는 데 사용하는 단일 Random 개체를 인스턴스화하는 것입니다. 난수 생성기를 인스턴스화하면 비용이 상당히 많이 들기 때문에 성능이 약간 향상됩니다.

적용 대상