gpt4 book ai didi

Groovy 优先级问题

转载 作者:行者123 更新时间:2023-12-04 08:43:42 24 4
gpt4 key购买 nike

我正在 groovy 中实现加权彩票。它允许一些参与者比其他参与者有更好的获胜机会(基本上就像 NBA 选秀一样)。它的工作原理是将每个参与者扔进一个数组 N 次,其中 N 是您必须获胜的机会数。然后它从该数组中选择一个随机索引。

像一个优秀的小程序员一样,我写了一个测试。它从小组中选出 100 次获胜者,并输出每个参与者被选中的次数。期望值将大致与他们应该被选中的次数一致(基于他们的机会数量)。结果是……关闭。

我将问题缩小到一行,如果拆分为 2 个单独的语句,则可以完美运行。下面是该例程的精简版。 “坏”版本处于事件状态,“好版本”被注释掉

def randomInRange(int min, int max) { 
Random rand = new Random()
rand.nextInt((max - min) + 1) + min
}

def bob = [name:'bob', timesPicked:0]
def joe = [name:'joe', timesPicked:0]
def don = [name:'don', timesPicked:0]

def chanceWheel = []

//don should get picked a lot more
2.times{chanceWheel << bob}
2.times{chanceWheel << joe}
6.times{chanceWheel << don}

//pick somebody at random from the chance wheel
100.times{
//this will produce timesPicked counts that do NOT sum to 100 and usually under-represents don
chanceWheel[randomInRange(0,9)].timesPicked++

//splitting the logic into 2 lines will always have the correct sum of timesPicked with roughly the right distribution of winners
//def picked = chanceWheel[randomInRange(0,9)]
//picked.timesPicked++
}

println bob
println joe
println don

我的问题是单类轮版本有什么问题?我的猜测是它的执行顺序问题,但我终生无法弄清楚它在哪里脱轨。

最佳答案

chanceWheel[randomInRange(0,9)].timesPicked++ 


chanceWheel[randomInRange(0,9)].timesPicked = 
chanceWheel[randomInRange(0,9)].timesPicked + 1

其中调用 randomRange()两次与工作示例相反,它被调用一次并分配给一个变量。

关于Groovy 优先级问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26368094/

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