【问题标题】:Random Function In C#C#中的随机函数
【发布时间】:2010-11-18 18:40:11
【问题描述】:

在 C# 中选择两个数字之间的随机数的最佳方法是什么?

例如,如果我有一个低值 23 和一个高值 9999,那么在这两个数字之间并包含这两个数字的正确代码是什么? 提前致谢

【问题讨论】:

  • 应该从范围中统一选择数字吗?

标签: c# function


【解决方案1】:

像这样使用 Random 类:

Random rnd = new Random(); 
rnd.Next(23, 10000);

确保您只初始化一次 rnd 对象,以确保它确实为您生成随机值。

例如,如果你制作这个循环:

for( int i = 0 ; i < 10; i++ ){
  Random rnd = new Random();
  var temp = rnd.Next(23, 10000);
}

temp 每次都是相同的,因为生成 rnd 对象使用相同的种子,但像这样:

Random rnd = new Random();
for( int i = 0 ; i < 10; i++ ){
  var temp = rnd.Next(23, 10000);
}

它会生成 10 个唯一的随机数(当然,偶然地,两个或更多的数字可能是相等的)

【讨论】:

  • 谢谢。如果我想从文本文件中选择一个随机字符串,我该怎么办?
  • @Eva:最简单的方法是从文本文件中读取所有行,全部记住并计数,然后根据计数选择一个随机数。
  • @Knobloch:你能解释一下为什么种子在第一种情况下保持不变而在第二种情况下发生变化?循环不会为循环的迭代创建一个新的“rnd”实例吗?
【解决方案2】:

这取决于您要查找的是整数还是双精度数。对于整数使用Random.Next(minValue, maxValue):

返回指定范围内的随机数。

注意 minValue 是包含的,而 maxValue 是排除的。

在指定范围内选择随机双精度没有等效方法。相反,您应该使用NextDouble 方法选择一个介于 0.0 和 1.0 之间的随机数,然后使用线性变换来扩展、减少和/或转换范围。

【讨论】:

  • 你确定吗?我在 VS 中编写了这段代码,但在 Random Function 中没有像“Next”这样的子代码。 Tnx 为您提供帮助
  • @Eva:这是一个实例方法——你需要一个 Random 对象(例如你可以在程序启动时创建一个)。
  • @Eva - 如果您正在尝试这样做,则没有静态 Next 函数,因此您不能简单地编写 Random.Next。详情见我的回答。
  • @Eva:我链接的页面上也有一些示例。你看过那些吗?
  • 您的示例使它看起来像一个静态方法,因为 Random 上的大写 R。这有点令人困惑。
猜你喜欢
  • 2012-08-24
  • 2014-04-27
  • 2014-08-19
  • 2016-07-17
  • 2014-01-16
  • 2013-06-27
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多