【问题标题】:Random.Next() returns always the same value [duplicate]Random.Next() 总是返回相同的值[重复]
【发布时间】:2013-04-17 00:43:27
【问题描述】:

我不想获得 ArrayList 的随机实例,但我的代码总是返回相同的值。

public static void randomEvent(){
            Random rnd = new Random();
            int which = rnd.Next(1,events.Count);
            Debug.WriteLine("Which event: " + which);
            Debug.WriteLine("Count Events: "+ events.Count);
            ((Event) events[which-1]).write();
        }

events.Count 的大小为 2。

【问题讨论】:

    标签: c#


    【解决方案1】:

    如果 events.Count 是 2,那么您调用的是 rnd.Next(1,2)

    documentation 表示第一个参数是包含的,第二个参数是排除的。你正在返回一个int。你要求一个 int x,其中 1

    你真的应该打电话给rnd.Next(0,events.Count),然后你只需要打电话events[which],而不是events[which-1]

    【讨论】:

      【解决方案2】:

      Random rnd = new Random(); 移出randomEvent() 方法。

      private static Random rnd = new Random();
      
      public static void randomEvent(){
          int which = rnd.Next(1,events.Count);
          Debug.WriteLine("Which event: " + which);
          Debug.WriteLine("Count Events: "+ events.Count);
          ((Event) events[which-1]).write();
      }
      

      【讨论】:

      • 静态关键字导致问题
      • 请注意,Random 实例不是线程安全的,因此如果事件可能被多个线程触发,您需要一种处理方法。
      猜你喜欢
      • 2010-12-11
      • 2011-07-12
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      相关资源
      最近更新 更多