作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从以下枚举中进行过滤,以根据随机机会选择其中一个值。
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/
我是一名优秀的程序员,十分优秀!