首页 文章

如何在Rust中生成一个范围内的随机数?

提问于
浏览
15

在搜索如何使用Rust生成随机数时,我遇到了以下示例 . 但是,它似乎没有用......示例似乎没有显示它适用于哪个版本的Rust,所以也许它已经过时了,或者我可能出错了 .

//   http://static.rust-lang.org/doc/master/std/rand/trait.Rng.html

01  use std::rand;
02  use std::rand::Rng;
03
04  fn main() {
05    let mut rng = rand::task_rng();
06    let n: uint = rng.gen_range(0u, 10);
07    println!("{}", n);
08    let m: float = rng.gen_range(-40.0, 1.3e5);
09    println!("{}", m);
10  }

当我尝试编译它时,会产生以下结果:

test_rand002.rs:6:17: 6:39 error: type `@mut std::rand::IsaacRng` does not
implement any method in scope named `gen_range`
test_rand002.rs:6    let n: uint = rng.gen_range(0u, 10);
                               ^~~~~~~~~~~~~~~~~~~~~~
test_rand002.rs:8:18: 8:46 error: type `@mut std::rand::IsaacRng` does not
implement any method in scope named `gen_range`
test_rand002.rs:8    let m: float = rng.gen_range(-40.0, 1.3e5);
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to 2 previous errors

在同一页面(上面)上有另一个例子(如下所示)可以工作 . 然而,它并没有完全符合我的要求,尽管我可以适应它 .

其他例子(有效):

use std::rand;
use std::rand::Rng;

fn main() {
   let mut rng = rand::task_rng();
   let x: uint = rng.gen();
   println!("{}", x);
   println!("{:?}", rng.gen::<(f64, bool)>());
}

如何在给定范围内使用Rust(例如:i64)生成“简单”随机数(例如:0到n)?

3 回答

  • 20

    以这种方式为我工作:

    extern crate rand;
    use rand::Rng;
    fn main(){
        // Generate random number in the range [0, 99]
        let num = rand::thread_rng().gen_range(0, 100); 
        println!("{}", num);
    }
    

    它会生成0到100之间的随机数 .

    别忘了将rand依赖项添加到cargo.toml

    编辑:生成的随机数在区间[0,99]内

  • 14

    这最近发生了很大的变化(对不起!这一切都是我),在0.8中它被称为gen_integer_range(注意URL中的 /0.8/ 而不是 /master/ ,如果你使用的是0.8,你需要阅读这些文档) .

    一句警告: .gen_integer_range 在很多方面完全不正确,新的 .gen_range 没有不正确的问题 .


    master的代码( .gen_range 工作正常):

    use std::rand::{task_rng, Rng};
    
    fn main() {
        // a number from [-40.0, 13000.0)
        let num: f64 = task_rng().gen_range(-40.0, 1.3e4);
        println!("{}", num);
    }
    
  • 6

    现在生锈是稳定的,可以像这样生成一个随机数:(使用箱子:rand = 0.3和rand = 0.4)

    extern crate rand;
    use rand::distributions::{IndependentSample, Range};
    
    fn main() {
      let step =  Range::new(0, 50);
      let mut rng = rand::thread_rng();
      let choice = step.ind_sample(&mut rng);
      println!("{}", choice);
    }
    

    Live example并链接到Docs

相关问题