按一下以給予評分及指教
MSDN
MSDN Library
.NET 開發
.NET Framework
Random 類別
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
.NET Framework 類別庫
Random 類別

表示虛擬亂數產生器,為產生數字序列 (Sequence) 的裝置,符合隨機方式的特定統計需求。

命名空間:  System
組件:  mscorlib (在 mscorlib.exe)

Visual Basic (宣告)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class Random
Visual Basic (使用方式)
Dim instance As Random
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Random
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Random
J#
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
public class Random
JScript
public class Random

虛擬亂數是以相等的機率從有限的數字集中選取。選取的數字並非是完全隨機,因為是使用有限性數學演算法來選取它們,但是用於實際用途已足夠。目前 Random 類別的實作是以 Donald E. Knuth 的減法亂數產生器演算法為基準。如需詳細資訊,請參閱 D. E. Knuth 所著的《The Art of Computer Programming, volume 2: Seminumerical Algorithms》,Addison-Wesley, Reading, MA, second edition, 1981。

亂數的產生始於種子值。如果重複使用相同的種子會產生相同的連續數字。其中一個產生不同序列的方法是讓種子值時間相依,由此以每個 Random 的新執行個體 (Instance) 產生不同的系列。根據預設,Random 類別的無參數建構函式會使用系統時鐘來產生其種子值,而參數化的建構函式可以根據目前時間的刻度數目而接受 Int32 值。

然而,因為時鐘的解析度有限,所以若在極短時間內連續建立不同的 Random 物件,就會建立亂數產生器,產生序列完全相同的亂數。只要建立單一 Random 物件,而不要建立多個物件,就可以避免這個問題。

若要改善效能,則要建立一個 Random 以在一段時間內產生許多亂數,而不要重複地建立新的 Random 以產生一個亂數。

例如,若要產生密碼學上適用於建立隨機密碼的安全亂數,則使用從 System.Security.Cryptography..::.RandomNumberGenerator 衍生的類別,例如 System.Security.Cryptography..::.RNGCryptoServiceProvider

繼承者注意事項

在 .NET Framework 1.0 和 1.1 版中,衍生自 Random 的類別最小實作 (Implementation) 需要覆寫 Sample 方法,用以定義產生亂數的全新或修改過的演算法。衍生類別 (Derived Class) 接著會依賴 Random..::.Next()()()Random..::.Next(Int32)Random..::.Next(Int32, Int32)NextBytesNextDouble 方法的基底類別 (Base Class) 實作,呼叫 Sample 方法的衍生類別實作。

在 .NET Framework 2.0 (含) 以後版本中,Random..::.Next()()()Random..::.Next(Int32, Int32)NextBytes 方法的行為已經變更,因此這些方法並不需要呼叫 Sample 方法的衍生類別實作。因此,衍生自使用 .NET Framework 2.0 (含) 以後版本之 Random 的類別應該也會覆寫這三種方法。

下列程式碼範例會使用類別建構函式的不同多載來建立 Random 物件,並從這些物件中產生一系列的隨機整數和雙精度浮點數 (Double)。

Visual Basic
' 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 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
*/

Visual C++
// Example of the Random class constructors and Random::NextDouble( ) 
// method.
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( " {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.
void FixedSeedRandoms( int seed )
{
   Console::WriteLine( "\nRandom numbers from a Random object with seed = {0}:", seed );
   Random^ fixRand = gcnew 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( "\nRandom numbers from a Random object "
   "with an auto-generated seed:" );
   Random^ autoRand = gcnew Random;
   RunIntNDoubleRandoms( autoRand );
}

int main()
{
   Console::WriteLine( "This example of the Random class constructors and Random"
   "::NextDouble( ) \ngenerates 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:
 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
*/

System..::.Object
  System..::.Random
這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的清單,請參閱 .NET Framework 系統需求

.NET Framework

支援版本:3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0

.NET Compact Framework

支援版本:3.5、2.0、1.0

XNA Framework

支援版本:1.0
社群內容   什麼是社群內容?
新增內容      
Processing
© 2008 Microsoft Corporation. All rights reserved. 使用規定  |  商標  |  隱私權聲明
Page view tracker