【问题标题】:C# random - if statement only output = -1C# 随机 - if 语句仅输出 = -1
【发布时间】:2013-11-07 20:52:20
【问题描述】:

我正试图让我的程序输出 1 或 -1 这是我的代码到目前为止,它的唯一输出是 -1。这根本不是随机的。

Random rnd = new Random();
int L = rnd.Next(0, 1);
if (L == 0)
{
    Console.WriteLine(-1);
}
else
{
    Console.WriteLine(1);
}

【问题讨论】:

    标签: c# random


    【解决方案1】:

    第二个参数Random.Next(int, int) 给出了一个独占的上限。所以你说你想要一个大于或等于 0 且小于 1 的整数。这并没有为 0 以外的数字提供很大的范围:)

    来自文档:

    返回值
    类型:System.Int32
    大于或等于 minValue 且小于 maxValue 的 32 位有符号整数;即返回值的范围包括minValue,但不包括maxValue。如果 minValue 等于 maxValue,则返回 minValue。

    您还应该阅读我的article on randomness 以避免其他常见问题。

    【讨论】:

    • 哦,好的,您的建议是什么?
    • @user2966573:我建议你自己考虑一下,而不是我用勺子喂你 :) 想想你真正想要的上限。
    • 哦,就像介于 0 和 3 之间?所以只有 1 和 2?
    • @user2966573:不,因为下限是包含。仔细阅读文档。
    • @JonSkeet +1 你的文章建议使用加密随机性......很多人不太明白内置的随机函数不是很好。
    【解决方案2】:

    rnd.Next(0, 1)0 <= i < 1 范围内返回一个值i。唯一这样的值是0

    看看documentation

    最小值

    类型:System.Int32

    返回的随机数的下限。

    最大值

    类型:System.Int32

    返回的随机数的唯一上界。 maxValue 必须大于或等于 minValue。

    请注意,minValue包含maxValue独占。因此,更笼统地说,next() 的重载会返回以下范围内的值:

    minValue <= i < maxValue 
    

    如果您不了解该术语,在不等式的上下文中,包含 表示&lt;=&gt;=,排他表示&lt;&gt;

    好吧,上面的不等式在 minValue == maxValue 的情况下并不严格,但为了更清晰的说明,我选择忽略那个极端情况。

    【讨论】:

    • 太糟糕了。乔恩·斯基特在这里 ;)
    • @Adam 随意支持我的而不是他的! ;-) 好吧,乔恩的回答一如既往地好(指向他的文章的链接非常可靠)。我只是在开玩笑。
    【解决方案3】:

    带有 2 个参数的 Random.Next 返回值 min

    所以,您需要值 0 或 1,只需将代码更改为:rnd.Next(0, 2); - 这将返回 0 或 1

    【讨论】:

      【解决方案4】:

      我正试图让我的程序输出 1 或 -1 这是我目前的代码,它唯一的输出是 -1。这根本不是随机的。

      您可以改用简单的算法:

      int L = (rnd.Next (1, 3) * 2) - 3;
      Console.WriteLine(L);
      

      【讨论】:

      • 老实说,我发现它的可读性不如原来的,只是看了一眼我不知道你的代码是做什么的,我不得不停下来思考一下。您的版本与原始版本之间的性能差异可能可以忽略不计,但原始版本非常清楚地说明了正在做什么。
      • 我的回答中没有看到任何关于它更具可读性的内容。这只是一种不同的方法。其中,虽然效率差异很小,但仍然存在。
      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多