Bukkit / Java可定制的百分比机会

时间:2017-05-06 11:32:31

标签: java random probability bukkit

大家。我正在尝试在Bukkit中制作一个crates插件(这并不重要),而且我在随机抽奖方面遇到了麻烦。 由于一切都是可定制的(您可以随心所欲地创建无限量的奖品),我发现难以绘制百分比。 这是我现在的代码:

            for (DoubleStack ds : items.values()) {
                double chance = ds.getChance();
                p.sendMessage(chance + " " + random + " " + ds.getItemStack().getType());
                if (random >= chance) {
                    p.getInventory().addItem(ds.getItemStack());
                    break;
                }
            }

DoubleStack只是我制作的一个类,用于存储项目和获取项目的机会。 正如你所看到的,我使用的方法是错误的,因为机会不现实,你有机会得到多个项目(我不想要这个)

那么,我怎么能这样做呢?

谢谢!

另外,我已经查看了所有其他概率线程,但它们并未涵盖明确知道概率是什么,它们只是做了以下事情:

int x = new Random().nextInt(100);
if(x <= 10 && x >= 20) {
   doSomething(); }
//Repeats with different numbers

1 个答案:

答案 0 :(得分:1)

试试这个:

for (DoubleStack ds : items.values()) {
    int random = new Random().nextInt(100);    
    int chance = ds.getChance(); // Must be in percentage
    if (random < chance) {
        p.getInventory().addItem(ds.getItemStack());
        break;
    }
}

总是获得奖励(机会必须加起来为100):

int random = new Random().nextInt(100); 
int counter = 0;   
for (DoubleStack ds : items.values()) {
    int chance = ds.getChance();
    if (random < (chance + counter) && random >= counter) {
        p.getInventory().addItem(ds.getItemStack());
        break;
    }
    counter+=chance;
}