gpt4 book ai didi

java - 过滤机会枚举并根据随机机会选择一个

转载 作者:行者123 更新时间:2023-12-02 01:59:35 25 4
gpt4 key购买 nike

我正在尝试从以下枚举中进行过滤,以根据随机机会选择其中一个值。

enum class rewardType(var chance : Float, var tier : Int) {
TIER_1(60.0F,0),
TIER_2(45.0F,1),
TIER_3(20.0F,2),
TIER_4(10.0F,3),
TIER_5(2.0F,4),
TIER_6(1.0F,5)
}

目前我正在使用此代码选择一个值。

val (tier, tierChance) = rewardType.values().filter { it.chance.passRandom() }
.map { Pair(it.chance, it.tier) }

还有我的随机效用函数

val random = ThreadLocalRandom.current()!!

fun randomChance(value: Float) = random.nextFloat() * value

fun Float.passRandom() = randomChance(100F) < this

目前,大多数情况下它都会毫无问题地准确选择其中一个层值。然而,大约 %15 的时间我会得到一个 IndexArrayOutOfBounds

我知道这是因为枚举中的机会分散得很远(因为如果我向枚举添加更多值,机会不会分散得那么远,那么就不会发生此异常)。

如何修复此错误?或者有更好的方法吗?

欢迎使用 Java 回答

最佳答案

似乎当您的randomChance(100F)返回大于60F的 float 时,没有选择RewardType(或者我误解了一些东西 -我真的不了解 Kotlin;请验证这一点)。

此外,您似乎选择了 it.chance 作为 tier,并选择 it.tier 作为 tierChance > 在 val (tier, tierChance)Pair(it.chance, it.tier) 中。

关于java - 过滤机会枚举并根据随机机会选择一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51833913/

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