C#中Random.Next方法的使用小结

 更新时间:2024年01月22日 10:14:52   作者:wenchm  
在C#中,Random.Next()方法用于生成一个随机整数,本文主要介绍了C#中Random.Next方法的使用小结,具有一定的参考价值,感兴趣的可以了解一下

一、重载

返回一个随机整数。

Next()返回一个非负随机整数。
Next(Int32)返回一个小于所指定最大值的非负随机整数。
Next(Int32, Int32)返回在指定范围内的任意整数。

二、Next()

返回一个非负随机整数。

1.定义

public virtual int Next ();

返回
Int32
大于或等于 0 且小于 Int32.MaxValue 的 32 位有符号整数。

2.示例

//Next()
namespace ConsoleApp39
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);

            Random rnd = new();

            Console.WriteLine("Generating 10 random numbers:");

            for (uint i = 1; i <= 10; i++)
                Console.WriteLine($"{rnd.Next(),15:N0}");
        }
    }
}

// 运行结果:
/*
 Generating 10 random numbers:
  1,346,240,124
    723,453,914
  1,735,589,449
  1,860,966,112
  1,562,174,739
     22,804,240
    576,594,210
  1,204,251,909
  1,436,476,117
    828,029,130
 */

Random.Next 生成一个随机数,其值范围为 0 到小于 Int32.MaxValue。 若要生成值范围为 0 到某个其他正数的随机数,请使用 Random.Next(Int32) 方法重载。 若要在不同的范围内生成随机数,请使用 Random.Next(Int32, Int32) 方法重载。

三、Next(Int32)

返回一个小于所指定最大值的非负随机整数。

1.定义 

public virtual int Next (int maxValue);

参数
maxValue
Int32
要生成的随机数的上限(随机数不能取该上限值)。 maxValue 必须大于或等于 0。

返回
Int32
大于或等于零且小于 maxValue 的 32 位有符号整数,即:返回值的范围通常包括零但不包括 maxValue。 但是,如果 maxValue 等于 0,则返回 0。

例外
ArgumentOutOfRangeException
maxValue 小于 0。

2.示例1

// Next(Int32)
namespace ConsoleApp40
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);

            Console.WriteLine(
                "This example of the Random.Next() methods\n" +
                "generates the following output.\n");
            Console.WriteLine(
                "Create Random objects all with the same seed and " +
                "generate\nsequences of numbers with different " +
                "bounds. Note the effect\nthat the various " +
                "combinations of bounds have on the sequences.");

            NoBoundsRandoms(234);

            UpperBoundRandoms(234, int.MaxValue);
            UpperBoundRandoms(234, 2000000000);
            UpperBoundRandoms(234, 200000000);

            BothBoundsRandoms(234, 0, int.MaxValue);
            BothBoundsRandoms(234, int.MinValue, int.MaxValue);
            BothBoundsRandoms(234, -2000000000, 2000000000);
            BothBoundsRandoms(234, -200000000, 200000000);
            BothBoundsRandoms(234, -2000, 2000);

            // Generate random numbers with no bounds specified.
            void NoBoundsRandoms(int seed)
            {
                Console.WriteLine(
                    "\nRandom object, seed = {0}, no bounds:", seed);
                Random randObj = new(seed);

                // Generate six random integers from 0 to int.MaxValue.
                for (int j = 0; j < 6; j++)
                    Console.Write("{0,11} ", randObj.Next());
                Console.WriteLine();
            }

            // Generate random numbers with an upper bound specified.
            void UpperBoundRandoms(int seed, int upper)
            {
                Console.WriteLine(
                    "\nRandom object, seed = {0}, upper bound = {1}:",
                    seed, upper);
                Random randObj = new(seed);

                // Generate six random integers from 0 to the upper bound.
                for (int j = 0; j < 6; j++)
                    Console.Write("{0,11} ", randObj.Next(upper));
                Console.WriteLine();
            }

            // Generate random numbers with both bounds specified.
            void BothBoundsRandoms(int seed, int lower, int upper)
            {
                Console.WriteLine(
                    "\nRandom object, seed = {0}, lower = {1}, " +
                    "upper = {2}:", seed, lower, upper);
                Random randObj = new(seed);

                // Generate six random integers from the lower to
                // upper bounds.
                for (int j = 0; j < 6; j++)
                    Console.Write("{0,11} ",
                        randObj.Next(lower, upper));
                Console.WriteLine();
            }
        }
    }
}

/*
This example of the Random.Next() methods
generates the following output.

Create Random objects all with the same seed and generate
sequences of numbers with different bounds. Note the effect
that the various combinations of bounds have on the sequences.

Random object, seed = 234, no bounds:
2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2147483647:
2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2000000000:
1947533580   954563751   662424922  1007613896  1707392518   101943116

Random object, seed = 234, upper bound = 200000000:
194753358    95456375    66242492   100761389   170739251    10194311

Random object, seed = 234, lower = 0, upper = 2147483647:
2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, lower = -2147483648, upper = 2147483647:
2034812868   -97573602  -724936960    16350718  1519113864 -1928562472

Random object, seed = 234, lower = -2000000000, upper = 2000000000:
1895067160   -90872498  -675150156    15227793  1414785036 -1796113767

Random object, seed = 234, lower = -200000000, upper = 200000000:
189506716    -9087250   -67515016     1522779   141478503  -179611377

Random object, seed = 234, lower = -2000, upper = 2000:
    1895         -91        -676          15        1414       -1797
*/

3.示例2

生成一个随机整数,该整数用作索引从数组中检索字符串值。 由于数组的最高索引小于其长度的 1,因此 属性的值 Array.Length 作为 maxValue 参数提供。

// Next(Int32)
namespace ConsoleApp41
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Random rnd = new();
            string[] malePetNames = [ "Rufus", "Bear", "Dakota", "Fido",
                          "Vanya", "Samuel", "Koani", "Volodya",
                          "Prince", "Yiska" ];
            string[] femalePetNames = [ "Maggie", "Penny", "Saya", "Princess",
                            "Abby", "Laila", "Sadie", "Olivia",
                            "Starlight", "Talla" ];

            // Generate random indexes for pet names.
            int mIndex = rnd.Next(malePetNames.Length);
            int fIndex = rnd.Next(femalePetNames.Length);

            // Display the result.
            Console.WriteLine("Suggested pet name of the day: ");
            Console.WriteLine("   For a male:     {0}", malePetNames[mIndex]);
            Console.WriteLine("   For a female:   {0}", femalePetNames[fIndex]);
        }
    }
}

// 运行结果:
/*
Suggested pet name of the day:
   For a male:     Samuel
   For a female:   Abby
*/

四、Next(Int32, Int32)

返回在指定范围内的任意整数。

1.定义

public virtual int Next (int minValue, int maxValue);

参数
minValue
Int32
返回的随机数的下界(随机数可取该下界值)。

maxValue
Int32
返回的随机数的上界(随机数不能取该上界值)。 maxValue 必须大于或等于 minValue。

返回
Int32
一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即:返回的值范围包括 minValue 但不包括 maxValue。 如果 minValue 等于 maxValue,则返回 minValue。

例外
ArgumentOutOfRangeException
minValue 大于 maxValue。

重载 Next(Int32, Int32) 返回范围从 minValue 到 maxValue - 1 的随机整数。 但是,如果 maxValue 等于 minValue,则 方法返回 minValue。与仅返回非负值的方法的其他重载 Next 不同,此方法可以返回负随机整数。 

2.示例1

使用 Random.Next(Int32, Int32) 方法生成具有三个不同范围的随机整数。 请注意,此示例的确切输出取决于传递给 Random 类构造函数的系统提供的种子值。

// Next(Int32, Int32)
namespace ConsoleApp42
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);

            Random rnd = new();

            Console.WriteLine("\n20 random integers from -100 to 100:");
            for (int ctr = 1; ctr <= 20; ctr++)
            {
                Console.Write("{0,6}", rnd.Next(-100, 101));
                if (ctr % 5 == 0) Console.WriteLine();
            }

            Console.WriteLine("\n20 random integers from 1000 to 10000:");
            for (int ctr = 1; ctr <= 20; ctr++)
            {
                Console.Write("{0,8}", rnd.Next(1000, 10001));
                if (ctr % 5 == 0) Console.WriteLine();
            }

            Console.WriteLine("\n20 random integers from 1 to 10:");
            for (int ctr = 1; ctr <= 20; ctr++)
            {
                Console.Write("{0,6}", rnd.Next(1, 11));
                if (ctr % 5 == 0) Console.WriteLine();
            }
        }
    }
}

// 运行结果:
/*
20 random integers from -100 to 100:
   -78   -13    58   -11    80
   -49    -5   -57    81   -44
    69    28   -63   -23    65
    96   -20   -37    76    18

20 random integers from 1000 to 10000:
    3738    6382    4790    2334    1875
    6557    6491    2583    2012    6601
    5929    4639    7814    3045    1737
    5512    4275    8866    2288    7201

20 random integers from 1 to 10:
     4     7     1     5     7
     2     7     6     3     4
    10     6     3     3     7
     1     3     1    10     6

 */

3.示例2

使用 Random.Next(Int32, Int32) 方法生成具有三个不同范围的随机整数。 请注意,此示例的确切输出取决于传递给 Random 类构造函数的系统提供的种子值。

// Next(Int32, Int32)
namespace ConsoleApp43
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Random rnd = new();
            string[] malePetNames = [ "Rufus", "Bear", "Dakota", "Fido",
                          "Vanya", "Samuel", "Koani", "Volodya",
                          "Prince", "Yiska" ];
            string[] femalePetNames = [ "Maggie", "Penny", "Saya", "Princess",
                            "Abby", "Laila", "Sadie", "Olivia",
                            "Starlight", "Talla" ];

            // Generate random indexes for pet names.
            int mIndex = rnd.Next(0, malePetNames.Length);
            int fIndex = rnd.Next(0, femalePetNames.Length);

            // Display the result.
            Console.WriteLine("Suggested pet name of the day: ");
            Console.WriteLine("   For a male:     {0}", malePetNames[mIndex]);
            Console.WriteLine("   For a female:   {0}", femalePetNames[fIndex]);
        }
    }
}

// 运行结果:
/*
Suggested pet name of the day:
   For a male:     Samuel
   For a female:   Penny
 */

到此这篇关于C#中String.PadRight方法的使用小结的文章就介绍到这了,更多相关C# String.PadRight内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • C#中分部方法和分部类分析

    C#中分部方法和分部类分析

    这篇文章主要介绍了C#中分部方法和分部类基本用法,并且较为详细的分析了分部方法和分部类使用时的注意事项,需要的朋友可以参考下
    2014-11-11
  • unity 如何使用LineRenderer 动态划线

    unity 如何使用LineRenderer 动态划线

    这篇文章主要介绍了unity 使用LineRenderer 动态划线的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C#基于Socket套接字的网络通信封装

    C#基于Socket套接字的网络通信封装

    这篇文章主要为大家详细介绍了C#基于Socket套接字的网络通信封装本文实例为大家分享了Java实现图片旋转的具体代码,供大家参考,具体内容如下
    2021-11-11
  • c#互斥锁Mutex类用法介绍

    c#互斥锁Mutex类用法介绍

    本文详细讲解了c#互斥锁Mutex类的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • C#实现基于IE内核的简单浏览器完整实例

    C#实现基于IE内核的简单浏览器完整实例

    这篇文章主要介绍了C#实现基于IE内核的简单浏览器,较为详细的分析了C#实现浏览器的原理与主要功能实现方法,并附带完整实例供大家下载,需要的朋友可以参考下
    2015-07-07
  • C#和.NET生成和使用异步流的方法实现

    C#和.NET生成和使用异步流的方法实现

    异步流可以简化异步文件的读取、写入和处理,本文主要介绍了C#和.NET生成和使用异步流的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • C# 判断字符串第一位是否为数字

    C# 判断字符串第一位是否为数字

    C# 判断字符串第一位是否为数字,需要的朋友可以参考一下
    2013-04-04
  • C# Onnx实现特征匹配DeDoDe检测

    C# Onnx实现特征匹配DeDoDe检测

    这篇文章主要为大家详细介绍了C# Onnx如何实现特征匹配DeDoDe检测,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • 解决C# 截取当前程序窗口指定位置截图的实现方法

    解决C# 截取当前程序窗口指定位置截图的实现方法

    本篇文章是对C#中截取当前程序窗口指定位置截图的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#中volatile与lock用法

    C#中volatile与lock用法

    这篇文章主要介绍了C#中volatile与lock用法,较为详细的分析了C#中volatile与lock的适用情况及用法实例,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10

最新评论