为什么执行的结果不一样?

时间:2022-03-29 20:40:27
Randomize;
  for i:=0 to 3 do
    MyName:=MyName+chr(Random(26)+97);
//---------------
  for i:=0 to 3 do
    begin
      Randomize;
      MyName:=MyName+chr(Random(26)+97);
    end;
这两段代码执行为什么会不一样?
第一段代码得到的myname是由4个随机的字母组成的
而第二段却是由4个相同的字母组成
为什么会这样呢?

12 个解决方案

#1


把Randomize放到循环中,执行,那么random得到的数据是一样的。你把Randomize放到循环外执行有什么不好吗?

#2


因为你的初始化Randomize放的位置不同!

建议你了解一下:
1、Randomize 的帮助说明
2、什么是随机数发生机制?
3、什么是随机种子?

#3


建議用第 二種方法

  for i:=0 to 3 do
    begin
      Randomize;
      MyName:=MyName+chr(Random(26)+97);
    end;

#4


第一个是循环前已经产生一个随机种子,而二个是每次循环都产生随机种子,当然结果不一样。

#5


关注

#6


Randomize 的帮助说明 什么是随机数发生机制?

#7


谢谢了,这个地方我老是迷糊
我采用的是第一中方法
因为我要得到的是随机的一个字符串

#8


to  l_xiaofeng(≈流水≈不腐≈)
能不能讲一讲原理或者机制
为什么会这样
麻烦了
现在我是半知半解

#9


up

#10


但是Randomize是跟时间有关的,也不至于重复?

#11


直接Ctrl+鼠标左键看Randomize的代码,它不过是根据当前时间初始化一个随机种子变量

然后调用Random根据这个变量产生随机数,计算机产生的只能是这种伪随机数

然后再想想时间不过是取到毫秒而已,而你那段循环程序不过几个时钟周期就完成了,自然取到的随机种子变量很可能完全一样,自然根据同一随机种子变量取到的伪随机数序列的第一个数字自然完全一样!

#12


谢谢了

#1


把Randomize放到循环中,执行,那么random得到的数据是一样的。你把Randomize放到循环外执行有什么不好吗?

#2


因为你的初始化Randomize放的位置不同!

建议你了解一下:
1、Randomize 的帮助说明
2、什么是随机数发生机制?
3、什么是随机种子?

#3


建議用第 二種方法

  for i:=0 to 3 do
    begin
      Randomize;
      MyName:=MyName+chr(Random(26)+97);
    end;

#4


第一个是循环前已经产生一个随机种子,而二个是每次循环都产生随机种子,当然结果不一样。

#5


关注

#6


Randomize 的帮助说明 什么是随机数发生机制?

#7


谢谢了,这个地方我老是迷糊
我采用的是第一中方法
因为我要得到的是随机的一个字符串

#8


to  l_xiaofeng(≈流水≈不腐≈)
能不能讲一讲原理或者机制
为什么会这样
麻烦了
现在我是半知半解

#9


up

#10


但是Randomize是跟时间有关的,也不至于重复?

#11


直接Ctrl+鼠标左键看Randomize的代码,它不过是根据当前时间初始化一个随机种子变量

然后调用Random根据这个变量产生随机数,计算机产生的只能是这种伪随机数

然后再想想时间不过是取到毫秒而已,而你那段循环程序不过几个时钟周期就完成了,自然取到的随机种子变量很可能完全一样,自然根据同一随机种子变量取到的伪随机数序列的第一个数字自然完全一样!

#12


谢谢了