【求助】随机函数失效问题

Xmzzz 2024-5-2 913

怎么样让 随机函数正常工作。输出随机的数字?

代码逻辑:

Code AardioLine:13复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
    • winform.setInterval(
    • function(){
    • thread.invoke(
    • function(winform){
    • import console;
    • import math;
    • math.randomize();
    • console.log( "随机函数:" ++ tostring(math.random(1,4)) )
    • return ;
    • },winform
    • )
    • },1000
    • )


    结果:

    随机函数:1

    随机函数:2

    随机函数:2

    随机函数:2

    随机函数:3

    随机函数:3

    随机函数:4

    随机函数:4

    随机函数:4

    随机函数:1

    随机函数:1

    随机函数:2

    随机函数:2

    随机函数:2

    随机函数:3

    随机函数:3

    随机函数:3

    随机函数:4

    随机函数:4


    最新回复 (3)
    • 光庆 2024-5-2
      0 2

      1、手册中说:设置随机数种子,在使用math.random函数创建随机数以前,必须调用并且仅调用math.randomize()一次。

      2、我猜测:启动线程时,线程中会自动加载math库,同时自动执行math.randomize() 函数。

            这就相当于每次取随机数前都进行了一次math.randomize()。

            而影响随机结果不随机的重要原因,我猜测是其默认参数 time.tick() 在短时间内的较小差值或有规律的变化导致的。

    • 光庆 2024-5-2
      0 3

      可通过下面的方式变相解决:

      Code AardioLine:13复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
      • winform.setInterval(
      • function(){
      • var 随机数种子 = math.random(0,time.tick());
      • thread.invoke(
      • function(新随机数种子){
      • import console;
      • math.randomize(新随机数种子)
      • console.log( "随机函数:" ++ math.random(1,4) )
      • return ;
      • },随机数种子
      • )
      • },1000
      • )


    • Xmzzz 2024-5-2
      0 4
      光庆 可通过下面的方式变相解决:winform.setInterval( function(){ var 随机数种子 = math.rando ...

      感谢 光庆 大佬指点,已用上

      在提问前也试过在主线程进行一次  math.randomize() 无效。

      新手被多线程 + math.random 整懵了 

      非常感谢 

    返回
    发新帖