第一种方式: 使用无参数的Random()构造函数;
默认种子值是使用DateTime.Now.Ticks作为种子值的,如果触发Random函数间隔时间很短,就有可能造成产生一样的随机数。
第二种方式: 使用RNGCryptoServiceProvider生成种子值;生成速度较慢。
1、Random()
使用与时间相关的默认种子值,初始化 Random 类的新实例。
2、Random(Int32)
使用指定的种子值初始化 Random 类的新实例。
参数为种子值,数据类型为Int32,用来计算伪随机数序列起始值的数字。 如果指定的是负数,则使用其绝对值。
Random类生成随机数是伪随机数,所以在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。 如果种子值相同则每次均产生相同的随机数。
扩展资料
Random 类位于 java.util 包中,主要用于生成伪随机数。Random 类将 种子数 作为随机算法的起源数字,计算生成伪随机数,其与生成的随机数字的区间无关。
创建 Random 实例时,若没有指定种子数,则会以当前时间作为种子数,来计算生成伪随机数。拥有相同种子的 Random 实例,在相同次数下,生成的伪随机数完全相同。
random.nextBoolean():
用于从该随机数生成器的序列中得到下一个伪均匀分布的 boolean 值。
random.nextBytes():
用于生成随机 byte 值并将其放入用户提供的 byte 数组中,生成的随机 byte 数等于 byte 数组的长度
参考资料来源:
百度百科——random()
必须要初始化:Randomize。没有种子。出来的数据肯定是固定的。
Randomize 语句示例
本示例用 Randomize 语句初始化随机数生成器。由于忽略了数值参数, 所以 Randomize 用 Timer 函数的返回值作为新的随机数种子值。
Dim MyValue
Randomize ' 对随机数生成器做初始化的动作。
MyValue = Int((6 * Rnd) + 1) ' 生成 1 到 6 之间的随机数值。
'需要先使用
Randomize ' 对随机数生成器做初始化的动作。
'但不能保存绝对不重复
'你说的每次应该是有限的,产生的数是有范围的,数量的个数就是有限的,根据抽屉原理,总有重复的时候。
'除非……
需要先使用
Randomize ' 对随机数生成器做初始化的动作。
a(n) = Int(90 * Rnd) + 10
改为 a(i) = Int(90 * Rnd) + 10