Vraag Hoe kan ik een willekeurig nummer genereren binnen een bereik in Rust?


Terwijl ik op zoek was naar het genereren van een willekeurig getal met Rust, kwam ik het volgende voorbeeld tegen. Het lijkt echter niet te werken ... het voorbeeld lijkt niet te laten zien op welke versie van Rust het van toepassing is, dus misschien is het verouderd, of misschien heb ik iets mis.

//   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  }

Wanneer ik probeer om dit te compileren, de volgende resultaten:

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

Er is nog een voorbeeld (als volgt) op dezelfde pagina (hierboven) dat werkt. Het doet echter niet precies wat ik wil, hoewel ik het zou kunnen aanpassen.

ander voorbeeld (dat werkt):

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)>());
}

Hoe kan ik een "eenvoudig" willekeurig nummer genereren met behulp van Rust (bijv .: i64) binnen een bepaald bereik (bijvoorbeeld: 0 tot n)?


11
2017-10-30 00:47


oorsprong


antwoorden:


Dit is de laatste tijd erg aan het veranderen (sorry, ik ben het allemaal geweest) en in 0.8 werd het genoemd gen_integer_range (merk op /0.8/ liever dan /master/ in de URL, als u 0.8 gebruikt nodig hebben om die documenten te lezen).

Een waarschuwing: .gen_integer_range was in veel opzichten volkomen onjuist, het nieuwe .gen_range heeft geen onjuistheidsproblemen.


Code voor meester (waar .gen_range werkt prima):

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);
}

12
2017-10-30 06:04



Werkte voor mij op deze manier:

extern crate rand;
use rand::Rng;
fn main(){
    let num = rand::thread_rng().gen_range(0, 100);
    println!("{}", num);
}

Het genereert een willekeurig getal tussen 0 en 100.

Vergeet niet randafhankelijkheden toe te voegen aan cargo.toml

Bewerken: het gegenereerde willekeurige getal valt binnen het interval [0,99]


13
2018-05-04 01:41



Nu is roest stabiel, een willekeurig getal kan als volgt worden gegenereerd: (Werkt met krat: rand = 0.3 en 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 voorbeeld en link naar Docs


3
2017-08-30 17:29