如何在 Rust 中生成随机掷骰子?
我知道我可以使用 rand::random
,但这需要我想生成一个整数类型的值。使用 rand::random<u8>() % 6
引入偏差。
最佳答案
使用Rng::gen_range
对于一次性值:
use rand::{self, Rng}; // 0.8.0
fn main() {
let mut rng = rand::thread_rng();
let die = rng.gen_range(1..=6);
println!("The die was: {}", die);
}
在引擎盖下,这创建了一个 Uniform
结构。如果您将获得多个随机数,请自行创建此结构:
use rand::{
self,
distributions::{Distribution, Uniform},
}; // 0.8.0
fn main() {
let mut rng = rand::thread_rng();
let die_range = Uniform::new_inclusive(1, 6);
let die = die_range.sample(&mut rng);
println!("{}", die);
}
Uniform
会进行一些预计算,以确定如何在不引入偏差的情况下将整个随机值范围映射到您想要的范围。它转换并调整您的原始范围以最接近地匹配随机数生成器的范围,丢弃任何落在这个新范围之外的随机数,然后调整大小并转换回原始范围。
另见:
关于random - 如何在不引入偏差的情况下生成一个范围内的随机 Rust 整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454677/