string v = new Random().NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8); 上面得到的v值重复的机率大吗?(如果是同一个方法里面调用两次)。今天生成订单的时候竟然碰到两个重复的,前面还有8位年月日
Random r = new Random(); 调用2次 string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
什么说法。我是每次获取都Random r = new Random();
每次获取都Random r = new Random();有问题
是不是说Random r = new Random(); string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8); v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8); Random r = new Random(); string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random(); v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8); 下面那个两次new Random()重复的机率高吗?如果是的话为什么啊?
Random r = new Random(); string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random(); v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);new Random()是创建以当前时间为种子的随机数,在很短的时间内同时创建两个实例,种子(当前时间)多半是一致的,所以重复性很高。 只用一个Random实例则可以避免这个问题。 Random r = new Random(); string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8); v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);什么是种子? 计算机只能产生模拟的随机数,这种随机数是根据一种模拟随机数公式计算出来的,所以需要有输入值,才能输出随机数。一般的种子是根据当前机器硬件标识+时间等来自动生成,也可以直接传入。 计算机模拟的随机数实际上是公式模拟产生的,并不是真正意义上随机生成的,所以如果种子(输入)相同,输出的随机数也相同。
new Random()是创建以当前时间为种子的随机数,在很短的时间内同时创建两个实例,种子(当前时间)多半是一致的,所以重复性很高。 Random r = new Random(); string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random(); v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8); 只用一个Random实例则可以避免这个问题。 Random r = new Random(); string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8); v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);什么是种子? 计算机只能产生模拟的随机数,这种随机数是根据一种模拟随机数公式计算出来的,所以需要有输入值,才能输出随机数。一般的种子是根据当前机器硬件标识+时间等来自动生成,也可以直接传入。 计算机模拟的随机数实际上是公式模拟产生的,并不是真正意义上随机生成的,所以如果种子(输入)相同,输出的随机数也相同。
private static int GetRandomSeed() { byte[] bytes = new byte[4]; System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider(); rng.GetBytes(bytes); return BitConverter.ToInt32(bytes, 0); } Random rd = new Random(GetRandomSeed()); rd.Next(0,10);
Random rand = new Random(Guid.NewGuid().GetHashCode());
调用2次
string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
什么说法。我是每次获取都Random r = new Random();
string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
Random r = new Random();
string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random();
v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
下面那个两次new Random()重复的机率高吗?如果是的话为什么啊?
string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random();
v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);new Random()是创建以当前时间为种子的随机数,在很短的时间内同时创建两个实例,种子(当前时间)多半是一致的,所以重复性很高。
只用一个Random实例则可以避免这个问题。
Random r = new Random();
string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);什么是种子?
计算机只能产生模拟的随机数,这种随机数是根据一种模拟随机数公式计算出来的,所以需要有输入值,才能输出随机数。一般的种子是根据当前机器硬件标识+时间等来自动生成,也可以直接传入。
计算机模拟的随机数实际上是公式模拟产生的,并不是真正意义上随机生成的,所以如果种子(输入)相同,输出的随机数也相同。
Random r = new Random();
string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random();
v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
只用一个Random实例则可以避免这个问题。
Random r = new Random();
string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);什么是种子?
计算机只能产生模拟的随机数,这种随机数是根据一种模拟随机数公式计算出来的,所以需要有输入值,才能输出随机数。一般的种子是根据当前机器硬件标识+时间等来自动生成,也可以直接传入。
计算机模拟的随机数实际上是公式模拟产生的,并不是真正意义上随机生成的,所以如果种子(输入)相同,输出的随机数也相同。
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
} Random rd = new Random(GetRandomSeed());
rd.Next(0,10);