次の方法で共有


Random クラス

擬似乱数ジェネレータを表します。擬似乱数ジェネレータは、乱数についての統計的な要件を満たす数値系列を生成するデバイスです。

この型のすべてのメンバの一覧については、Random メンバ を参照してください。

System.Object
   System.Random

<Serializable>
Public Class Random
[C#]
[Serializable]
public class Random
[C++]
[Serializable]
public __gc class Random
[JScript]
public
   Serializable
class Random

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

擬似乱数は、有限個の数値の中から等しい確率で選び出されます。この数字を選出するために使用する演算アルゴリズムには限界があるため、選び出された数字は完全な乱数ではありませんが、実質的には乱数として十分使用できます。

乱数の生成には、初期値としてシード値を使用します。同じシードを繰り返し使用すると、生成される乱数系列も同じになります。異なる乱数系列を生成する 1 つの方法は、シード値を時間によって決定することです。これにより、 Random の新しいインスタンスごとに異なる乱数系列を生成できます。

パフォーマンスを向上するには、1 つの乱数を生成するために繰り返し新しい Random を作成するのではなく、1 つの Random を作成して何回も使用し、多くの乱数を生成するようにします。

ランダム パスワードの作成に適した、暗号として安全な乱数を生成するには、たとえば、 System.Security.Cryptography.RNGCryptoServiceProvider などの System.Security.Cryptography.RandomNumberGenerator から派生したクラスを使用します。

使用例

[Visual Basic, C#, C++] 次に示すのは、クラス コンストラクタのさまざまなオーバーロードを使用して Random オブジェクトを作成し、それらのオブジェクトから Int32 および Double のランダムなシーケンスを生成するコード例です。

 
' Example of the Random class constructors and Random.NextDouble( ) 
' method.
Imports System
Imports System.Threading
Imports Microsoft.VisualBasic

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 the following output.
' 
' 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

[C#] 
// 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 the following output.

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
*/

[C++] 
// Example of the Random class constructors and Random::NextDouble( ) 
// method.
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

// Generate random numbers from the specified Random object.
void RunIntNDoubleRandoms( Random* randObj )
{
    // Generate the first six random integers.
    for( int j = 0; j < 6; j++ )
        Console::Write( S" {0,10} ", __box( randObj->Next( ) ) );
    Console::WriteLine( );

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

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

    RunIntNDoubleRandoms( fixRand );
}

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

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

    RunIntNDoubleRandoms( autoRand );
}

void main( )
{    
    Console::WriteLine(
        S"This example of the Random class constructors and Random" 
        S"::NextDouble( ) \ngenerates the following output.\n" );
    Console::WriteLine(
        S"Create Random objects, and then generate and " 
        S"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 the following output.

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:
 1624372556  1894939458   302472229   588108304    23919954  1085111949
 0.14595512  0.30162298  0.92267372  0.55707657  0.25430079  0.74143239

Random numbers from a Random object with an auto-generated seed:
 2105952511  1753605347   280739490   876793040  1129567796   524571616
 0.62652210  0.31846701  0.15984073  0.24458755  0.62160607  0.54857684

Random numbers from a Random object with an auto-generated seed:
  440048819  1612271236   259006751  1165477776    87731991  2111514930
 0.10708907  0.33531104  0.39700773  0.93209853  0.98891135  0.35572129
*/

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

Random メンバ | System 名前空間