使用C#在一个范围内生成一个随机数

RoR*_*RoR 235 .net c# random

如何在一个范围内生成随机数?

Adr*_*der 377

你可以试试

Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles
Run Code Online (Sandbox Code Playgroud)

看一下

随机类,Random.Next方法(Int32,Int32)Random.NextDouble方法

  • 只是添加一个注释,如果您正在使用NextDouble()并且不希望下限为零.您乘以上限和下限之间的差值,然后加上下限和零之间的差值.所以对于-1到1`touble rDouble =(r.NextDouble()*2)-1.0;` (29认同)
  • 或者是-1.0和1.0范围内的简化双生成器:Double randDoubleY = new Random().Next(-100,100)/ 100.0D; (2认同)
  • System.Random 不是随机的! (2认同)

Vis*_*iri 35

试试下面的代码.

Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51
Run Code Online (Sandbox Code Playgroud)


ozc*_*cho 31

就像是:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
Run Code Online (Sandbox Code Playgroud)

  • `Random`已经用系统值播种了,而'Millisecond`只是一个0到999之间的数字.如果这对行总是在代码中,那么`rnd.Next`只有1000个可能值种子每次都被重置.相同的种子,相同的随机数.我会把手动种子留下来. (10认同)
  • 什么是`DateTime.Now.Millisecond`? (2认同)
  • 您需要为其开始添加一些内容...... Random 对象只是对您给出的值进行大量数学计算,并且这样做的方式是每次调用 Next() _在同一个 Random 对象上_都会产生结果与前一次调用的值相当随机。为了使结果在不同的 Random 对象上更加随机,您可以从不同的数字开始 - 这里是 DateTime.Now.Millisecond。如果您输入一个常量,而不是一个变化的值,您将从 .Next() 获得相同的结果。 (2认同)

Kay*_*Kay 11

使用:

Random r = new Random();
 int x= r.Next(10);//Max range
Run Code Online (Sandbox Code Playgroud)

  • 这不指定范围. (2认同)

Kon*_*mit 10

这是Darrelk 答案的更新版本。它是使用C# 扩展方法实现的。每次调用此方法时,它不会分配内存new Random() )。

public static class RandomExtensionMethods
{
    public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
    {
        return random.NextDouble() * (maxNumber - minNumber) + minNumber;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法(确保导入包含 RandomExtensionMethods 类的命名空间):

var random = new System.Random();
double rx = random.NextDoubleRange(0.0, 1.0);
double ry = random.NextDoubleRange(0.0f, 1.0f);
double vx = random.NextDoubleRange(-0.005f, 0.005f);
double vy = random.NextDoubleRange(-0.005f, 0.005f);
Run Code Online (Sandbox Code Playgroud)


Dar*_*elk 6

对于以后的读者,如果您想要一个范围内的随机数,请使用以下代码:

public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
    return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}
Run Code Online (Sandbox Code Playgroud)

C#最小值和最大值之间的随机双精度

代码样例

  • 公式应采用以下方式:`return new Random()。NextDouble()*(maxNumber-minNumber)+ minNumber;` (2认同)
  • 你是对的,对不起。将更新答案。 (2认同)

Oha*_*der 5

除了生成整数和双精度数的Random Class之外,请考虑: