Answers:
你可以试试
Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles
看一下
Random()
使用时间相关的种子,但是将其明确写出对于可读性更好。
尝试下面的代码。
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
就像是:
var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
DateTime.Now.Millisecond
?
Random
已经使用系统值作为种子,并且Millisecond
仅是0到999之间的数字。如果这对行在代码中始终在一起,则rnd.Next
由于每次都会重置种子,因此将只有1000个可能的值。相同的种子输入,相同的随机数输出。我将手动种子排除在外。
Environment.TickCount
。
对于以后的读者,如果您想要一个范围内的随机数,请使用以下代码:
public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}
return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
除了生成整数和双精度数的Random Class之外,请考虑:
这是Darrelk Answer的更新版本。它是使用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;
}
}
用法(确保导入包含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);
double rDouble = (r.NextDouble()*2)-1.0;