【问题标题】:Greater chance to roll 6 with dice in Java在 Java 中用骰子掷出 6 的机会更大
【发布时间】:2013-06-04 06:20:00
【问题描述】:

我想知道如何编写一个更有机会掷出 6 的骰子? 我已经尝试了一切,但我无法弄清楚算法。 六的概率由用户给出。

我现在只是不知道如何编程random,它使用给定的概率掷出 6 或 1-5。

【问题讨论】:

    标签: java algorithm probability dice


    【解决方案1】:

    将区间 (0,1) 的剩余部分取出,将大小为 6 概率的区域分成 5 个相等的部分,并将这些区域分配给 1 - 5:

    /**
     * @param pSix probability that a six is returned
     * @param rnd Random instance
     * @return a random integer between 1 and 6 with 1-5 equiprobable and P(6) = pSix
     */
    public int loadedDice(final double pSix, final Random rnd) {
        final double pOther = (1d - pSix) / 5d;
        final float val = rnd.nextFloat();
        if (val < pSix) {
            return 6;
        }
        return (int) Math.ceil((val - pSix) / pOther);
      }
    }
    

    【讨论】:

      【解决方案2】:

      我建议使用基于百分比的方案。让用户选择一个六的概率,在这个例子中让我们说 30%。然后在 0-1.0 之间选择一个随机数(这是 java 的 Random#nextFloat 所做的)。如果低于或等于.3,则设为 6,否则设为 1-5。

      Random r = new Random();
      
      float probability = r.nextFloat(); // get a value between 0 and 1
      if (probability < probabilityOfSix){
          return 6;
      } else {
          return r.nextInt(4) +1;
      }
      

      【讨论】:

      • +1 我认为从技术上讲它应该是probability &lt; probabilityOfSix,否则 0 的概率实际上是 1600 万分之一。
      【解决方案3】:

      假设 6 出现的概率是两倍。得到一个从 1 到 7 的随机数,如果你的结果是 6 或 7,那么你就是 6。

      三倍的概率发生同样的事情。取一个1-8的随机数:6、7、8变成6。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-04
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 2017-11-06
        • 2021-12-11
        • 1970-01-01
        相关资源
        最近更新 更多