Java 如何通过偶然的机会获得一个高效、正确的drop系统

Java 如何通过偶然的机会获得一个高效、正确的drop系统,java,bukkit,Java,Bukkit,我想根据我设定的几率,在Minecraft中获得最有效和正确的投放系统 我实际上是这样创建的: double randomChance = getRandom(0, 100); for(DropObject dropObject : getDropByCategoryAndSource(category, source)) { if(randomChance <= dropObject.getChance()) { //give item etc. } }

我想根据我设定的几率,在Minecraft中获得最有效和正确的投放系统

我实际上是这样创建的:

double randomChance = getRandom(0, 100);
for(DropObject dropObject : getDropByCategoryAndSource(category, source)) {
    if(randomChance <= dropObject.getChance()) {
        //give item etc.
    }
}
double randomochance=getRandom(01100);
对于(DropObject DropObject:getDropByCategoryAndSource(类别,源)){

if(randomChance我看到的一个问题是,由于您正在生成一个从0到100的数字,然后将其与列表进行比较。因此,如果您从随机方法中获得数字37,则意味着所有概率等于或高于37%的项目都将被删除,我认为这不是期望的行为


我不知道列表的大小,但也许你可以在列表循环中生成一个新的随机数。

你是在寻找类似a的东西吗?不清楚你在问什么,或者“高效”是什么意思。如果完全是随机的,则无法保证所有项目都会被删除--这是随机的。如果您试图确定删除顺序,则需要运行它,直到所有项目都被删除,或者您需要加权/调整删除概率。或者您可以一次接一次地进行排序,始终删除最有可能删除的项目并在列表中下移。或者……等等c、 在不知道实际目标是什么的情况下,很难具体说明。@DaveNewton重点是,我通常会以这种方式删除一个项目,而其余的项目则完全错误。我对10000个区块进行了测试,结果出来的项目中有3/4是相同的材料,还有其他项目的百分比更高,没有脱落。然后你就需要了d来调试——这里我们没有什么可以帮助的。