我怎样才能让函数随机返回true或false
我想要一个可以调用以随机true
或false
每次调用的函数:
randBoolean() // true randBoolean() // false
randBoolean() // false
randBoolean() // true
如何返回随机布尔值?
回答:
您需要某种随机信息,并且根据其值,可以true
在一半的可能情况下返回它,而false
在另一半情况下可以返回。
使用一个非常简单的例子rand.Float32()
中的math/rand
包:
func rand1() bool {return rand.Float32() < 0.5
}
func main() { rand.Seed(time.Now().UnixNano())
fmt.Println(rand1())
}
这是在的doc文件中提到的math/rand
:
如果每次运行需要不同的行为,请使用种子函数初始化默认的源。
如果不设置种子,则每次运行应用程序时都会返回相同的伪随机信息。
一些变化:
func rand2() bool { return rand.Int31()&0x01 == 0
}
func rand3() bool {
return rand.Intn(2) == 0
}
一个有趣的解决方案,无需使用该math/rand
软件包。它使用以下select
语句:
func rand9() bool { c := make(chan struct{})
close(c)
select {
case <-c:
return true
case <-c:
}
}
该select
语句从可以继续进行而不会阻塞的情况中选择一种 随机
情况。由于可以立即进行从封闭渠道的接收,因此将随机选择2种情况之一,返回true
或false
。请注意,但这并不是完全随机的,因为这不是该select
语句的要求。
通道也可以移动到全局变量,因此无需在每次调用中创建一个通道或关闭一个通道:
var c = make(chan struct{})func init() {
close(c)
}
func rand9() bool {
select {
case <-c:
return true
case <-c:
return false
}
}
以上是 我怎样才能让函数随机返回true或false 的全部内容, 来源链接: utcz.com/qa/426533.html