gpt4 book ai didi

java - java中SQL表中概率的随机项

转载 作者:行者123 更新时间:2023-11-29 10:23:17 25 4
gpt4 key购买 nike

我试图弄清楚如何从这样的值表中选择一个具有给定机会的随机项目:

itemlottery (npcid, item, chance) VALUES (9100100, 1402011, 167)
itemlottery (npcid, item, chance) VALUES (9100100, 1041082, 267)
itemlottery (npcid, item, chance) VALUES (9100100, 1322003, 1668)
itemlottery (npcid, item, chance) VALUES (9100100, 1061033, 89)
itemlottery (npcid, item, chance) VALUES (9100100, 1051001, 89)
itemlottery (npcid, item, chance) VALUES (9100100, 2000005, 188983)

所以基本上我可以从 SQL 中获取项目和机会,但是用 java 对其进行硬编码会更好吗?

无论如何,这些是我需要的值(该列表实际上包含超过 50 个项目)。

现在我的问题是如何读取这些值,然后根据 Java 中的这些机会生成随机项?

这是一个游戏 NPC,它会根据机会为玩家提供随机抽奖项目。

编辑:您必须获得一件元素,而不能获得多件元素。机会越高,获得该元素的可能性就越大。

最佳答案

您可以在 MySQL 中使用 rand() 和累积和来执行此操作:

select t.*
from (select t.*, (@sum := @sum + chance) as cume_chance
from t cross join
(select @sum := 0, @r := rand()) params
) t
where @r < cume_chance / @sum and
@r >= (cume_chance - chance) / @sum;

rand() 计算为变量的原因是该函数仅计算一次。当外部 where 运行时,@sum 应包含 chance 的总和。另一种方法是使用子查询显式计算它。

关于java - java中SQL表中概率的随机项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com