如何根据百分比计算掉落率

时间:2014-03-02 15:04:23

标签: java math

我在这里发帖和math.stackexchange.com之间徘徊,但在这里选择了它,因为它与节目相关,我之前没有使用math.stackexchange.com

基本上我有6个不同的项目,我想根据百分比“放弃”,但我不知道如何实现这一点。数学不是我的强项,也不是没有帮助。

无论如何,第1项至第6项的百分比如下:

1%, 0.85%, 0.1%, 0.05%, 0.01%, 0.001%

因此第1项有1%的机会掉落,第2项有0.85%的机会掉落等。

我希望每次运行可以丢弃1个项目,如果没有满足这些“机会”,则会使用默认项目。考虑这6项奖励项目。

到目前为止,我已经尝试过这个:

        Random rn = new Random();

    int x = rn.nextInt(100)+1;

    if(100%x==0)//1%
    {

    }
    if(100%(x*100)==0) //0.1%
    {

    }

这似乎不公平,而且:

    Random rn = new Random();

    int x = rn.nextInt(100000)+1;

    if(100%x==0)//1%
    {

    }
    if(8500%x==0) //0.1%
    {

    }

看起来更糟糕。

我在考虑为每个项目使用一个随机数,但是因为它会在游戏循环中运行,所以会有很多RNG

我试图尽可能地保持这个问题以避免辩论等因此我不是在寻找最佳解决方案,只是一个有效的解决方案 - 如果需要任何其他信息,我我很高兴回答,只要它是n2k帮助我解决这个问题=)

2 个答案:

答案 0 :(得分:6)

为每个机会生成随机数是一种很好的方法:

    double[] chances = {1, 35, 0.85, 50, 0.1, 0.05, 0.01, 0.001, 65, 11};
    Random r = new Random();
    boolean dropped = false;
    for (int i = 0; i < chances.length; i++) {
        if (chances[i] > r.nextDouble() * 100) {
            System.out.println("Item with " + chances[i] + " chance is dropped");
            dropped = true;
            break;
        }
    }
    if (dropped == false) {
        System.out.println("Dropping default item");
    }

请注意,只要您只删除一个项目,元素的顺序就很重要。

例如,您有5个项目下降99%。从逻辑上讲,第五项只有(0.01 ^ 4)* 0.99的几率下降。

答案 1 :(得分:3)

我会生成0到1之间的随机双精度数,并使用范围:

  • 介于0和0.01之间(1%):项目1丢弃
  • 在0.01和0.0185之间(1%+ 0.85%):项目2下降
  • 介于0.0185和0.0195之间(1.85%+ 0.1%):项目3下降
  • ...