【发布时间】:2018-08-14 04:50:35
【问题描述】:
我正在尝试从以下枚举中进行过滤,以根据随机机会选择其中一个值。
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 回答
【问题讨论】:
标签: java arrays random enums kotlin