【问题标题】:How to check if 5 random numbers are the same [closed]如何检查5个随机数是否相同[关闭]
【发布时间】:2013-05-06 22:08:26
【问题描述】:

我不知道如何测试 5 个随机生成的数字是否相同。 到目前为止,我所拥有的只是他们的创作。

dice1 = rand.Next(1,7);

dice2 = rand.Next(1,7);

dice3 = rand.Next(1,7);

dice4 = rand.Next(1,7);

dice5 = rand.Next(1,7);

【问题讨论】:

    标签: c# .net random


    【解决方案1】:

    您可以这样做来生成 5 个随机掷骰子:

    var dice = (from i in Enumerable.Range(0, 5) select rand.Next(1, 7)).ToArray();
    

    或者用流利的语法:

    var dice = Enumerable.Range(0, 5).Select(i => rand.Next(1, 7)).ToArray();
    

    这是为了检查它们的相等性:

    var first = dice.First(); // or dice[0];
    var areSame = dice.Skip(1).All(d => d == first);
    

    【讨论】:

    • 小心延迟/延迟执行。 dice 可能会在底部的最后一行重新评估(生成不同的第一个值),从而产生不同的值。
    • linq 查询应该在第一次使用时只执行一次,然后重复使用
    • @TimS。好点子。我不认为这是一个大问题,但在这种情况下确实如此。我添加了ToArray() 让它更热切。
    • @Fabske 实际上,这不是真的,至少在一般情况下不是这样。在没有ToArray() 的情况下尝试我的代码,您会发现通常是dice.First() != dice.First()
    • 确实!泰我学到了一个新东西!
    【解决方案2】:
    if(dice1 == dice2 && dice2 == dice3 && dice3 == dice4 && dice4 == dice5) {
      // scream at the random number generator
    } else {
    
    }
    

    【讨论】:

      【解决方案3】:

      已编辑,我的第一个答案是脑子放屁。

      如果足够容易,您可以进行某种嵌套:

      if ((dice1 == dice2)&&(dice2 == dice3)&&(dice3 == dice4)&&(dice4 == dice5))
      

      这应该可以工作

      【讨论】:

        【解决方案4】:
        if(dice1 == dice2)
            if(dice2 == dice3)
                if(dice3 == dice4)
                    if(dice4 == dice5)
                        //do something...
        

        可能是一种更漂亮的方式,但这会起作用

        【讨论】:

          【解决方案5】:
          var result = new int[7];
          result[dice1]++;
          result[dice2]++;
          result[dice3]++;
          result[dice4]++;
          result[dice5]++;
          results.Any(x=>x==5);
          

          【讨论】:

            【解决方案6】:

            将它们放入HashSet,然后检查大小是否相同

            var dice = Enumerable.Range(0, 5).Select(i => rand.Next(1, 7)).ToArray();
            var set = new HashSet<int>(dice);
            bool areSame = set.Count == 1; //1 unique value means they are all the same.
            

            【讨论】:

              【解决方案7】:

              你可以使用这样的方法:

              public static bool AllEqual(params int[] values)
              {
                  foreach (var value in values)
                      if (values[0] != value)
                          return false;
                  return true;
              }
              

              并像这样使用它:

              bool allSame = AllEqual(dice1, dice2, dice3, dice4, dice5);
              

              但正如 p.s.w.g 所示,在一个可枚举元素中生成所有骰子可能会更好。

              【讨论】:

                【解决方案8】:

                首先,我建议将你的骰子变成可枚举的东西。 P.S.W.G.发布了一种非常优雅的方式来做到这一点,我有点嫉妒我不会想到它。这就是我的想法:

                        var dice = new List<int>();
                        for (int i = 0; i < 5; i++)
                        {
                            dice.Add(rand.Next(1, 7));
                        }
                

                然后您可以使用简单的评估来确定集合中的所有数字是否相同。我喜欢这个:

                        // if all the dice rolled the same, do something
                        if (dice.Distinct().Count() == 1)
                        {
                
                        }
                

                【讨论】:

                  猜你喜欢
                  • 2018-08-18
                  • 1970-01-01
                  • 2023-03-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-04-15
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多